• Android之EACCES (Permission denied)与Permission denied异常探密


      话说,Accipiter君,最近又开始怒学Android了,记得刚开始还是09年学的,现在的手机还是华为出的最早的一款Android手机C8500,那时候就想好好学习Android,赚点小钱,可是~~~没有坚持学习!遗恨这么几年啊!所以现在从头学习Android确有一种考古探密的感觉啊!进入正题吧,今天就对Android中的一个经典的异常进行一次探密行吧。。

    一、进入密室

      嗯,一是我想从浩瀚的Internet抓点东西,二是我想给浩瀚的Internet提供点东西,自己搭个服务,如何让小伙伴们看到了,现在的小伙伴们都流行移动,也得整个移动的平台吧。无奈,写了几句代码,就报了个java.net.ConnectException: socket failed: EACCES (Permission denied)异常。它就像个进入密室的门,从此就得去密室观光一番。

    二、密室见闻

      碰到问题,先看了日志,虽然是小白,但是有Internet大神在身边,相信神马都不是秘密!马上就搜索!搜索之,哈,难兄难弟还真多!有直接就是这个问题的【http://www.cnblogs.com/Lewis/p/3298994.html】,还有就是:java.io.IOException: open failed: EACCES (Permission denied)【http://blog.csdn.net/liranke/article/details/17239977】,总结之,都是和Permission【http://hi.baidu.com/spare_h/item/1c1b4ee8941e04f0e1a5d4cd】有关系。 神马?还有和JDK有关系的【https://www.java.net/node/703177】。

    三、密室揭秘

    1.最直接的就是java.net.ConnectException: socket failed: EACCES (Permission denied)异常,这个只需要在AndroidManifest.xml中加上:

    <uses-permission android:name="android.permission.INTERNET"/>

    2.什么?加上了,还是没看到真相啊!哦,你加的位置对吗?【http://stackoverflow.com/questions/8854359/android-open-failed-eacces-permission-denied】中有位置加错的解决方案,但是我用的Android是不建议加在:

        </application>
    </manifest>

    之间的位置的,给报一个警告,我放到<application>上边去之后,就好了。

    3.啊,位置对了,怎么还是没看到真相?那就看你用的Android的版本,这时候的log应该是报:android.os.NetworkOnMainThreadException异常按照【http://www.cnblogs.com/Lewis/p/3298994.html】的说法,基本上4.0之后的版本由于Android考虑到可能引起阻塞,程序假死的情形,就不推荐activity中直接写了,你要真想用的加上:

    StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().detectDiskReads().detectDiskWrites().detectNetwork().penaltyLog().build());
    

    加到什么位置?这个我是加到了java文件连接请求的开始位置

    但是经过我用3.0的虚拟机测试,报java.lang.SecurityException: Permission denied (missing INTERNET permission?)异常,之后依旧报:

    android.os.NetworkOnMainThreadException异常。用同样的方式也可以解决。

    4.正常真相应该已经明了,但是JDK神马的有影响的话,这里也有个解决方案:More digging around and it seems the VPN client has IPv6 disabled which is causing issues with JDK7.If I use the following flag -Djava.net.preferIPv4Stack=true I no longer see the errors. 出自【https://www.java.net/node/703177

    5.还是不行,那你可以尝试所有的都重启一下,重新来过吧【http://stackoverflow.com/questions/17549920/socket-failed-eacces-permission-denied

    6.我的疑团,经过这几番的折腾,看了不少的疑点,也有不少的释疑。但是,我疑团已然还在,奈何!艹,居然把AndroidManifest.xml中的android.permission.INTERNET写成了android.premission.INTERNET!这~~~~原来一切的疑问都是自己问自己~~~一切的疑团都是自己怀疑自己~~一切的恐怖都是自己吓唬自己!

    探密结束!

  • 相关阅读:
    Redis的发布订阅
    Redis的事物
    Redis的持久化
    Redis配置文件详解
    Redis五大数据类型
    Redis安装
    DP练习题回顾
    基环树浅谈
    Tarjan算法浅谈
    拓展欧拉定理浅谈
  • 原文地址:https://www.cnblogs.com/accipiter/p/3902309.html
Copyright © 2020-2023  润新知