在android 中开发java.net.SocketException: socket failed: EACCES (Permission denied) 报错
知识点:
1、SocketException网络操作报错;
2、解决方法;
我今天遇到一个用户的反馈,遇到的是这样的问题,点击登录,但是无法登录,而是提示java.net.SocketException: socket failed: EACCES (Permission denied) 这个信息。第一反应就是缺少网络权限嘛,然后赶紧检查有没有加入网络访问权限。
在androidmanifest文件中加入
然而,我在程序里面已经早就写好了。现在写android app项目极少可能不联网操作了吧,所以这个一开始就应该加入的了。所以,这个问题排除。但是,我找了好多资料,都没有找到合适的描述和解决方法。不能是我认同。
一下是我找的一些可能的原因。
无奈用户手机不在我这里,不然看下log 错误就明了了。现在只能叫用户重新下载app了。然后就OK了。这真的是有点蛋疼啊。
或者
java文件网络操作前,加入如下代码
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().detectDiskReads().detectDiskWrites().detectNetwork().penaltyLog().build());
原因:
最有可能,是因为可能网络操作的代码写在了UI线程里,从android 4.0以后就不允许这样操作了。因为在UI线程里进行网络操作,如果网络不好那么整个程序就容易ANR。所以android4.0以后对要网络操作的代码必须新开一个线程来做。
又或者
网络权限要这样写:
而不是这样写
又或者
important - the uses-permission tag needs to be before the application tag in the manifest file. thats what fixed it for me at least.
墙外这样说:权限要在
又或者
重启ide之后,又可以正常运行代码了。
总的原因:
缺少权限?
权限写错?
UI线程中网络操作?
端口占用导致?
android版本问题?
开发工具问题?重启,重编译