Android坑之java.net.SocketException: Permission denied

OK,不知道这算不算是一个坑,记录一下吧,一上午都过去了。。。

先上代码,简单的网路请求上传图片,做了精简,只留关键部分。
HttpURLConnection请求
一执行到con.getOutputStream()就报错:java.net.SocketException Permission denied刚开始以为代码抄的不好,各种百度,发现没有加权限:

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

结果加上也不好使,又陆续加了
<uses-permission android:name=”android.permission.ACCESS_NETWORK_STATE” />
<uses-permission android:name=”android.permission.WRITE_EXTERNAL_STORAGE” />

都不好使。。。后来单开线程请求也不好使(代码已省略)。

然后各种百度找到的都是那几篇文章, 要么是模拟器忘了开sd卡,可是我用的真机啊。。。
然后各种胡思乱想,难道是因为我的手机没root?这倒是跟没有权限的用户执行命令的时候没权限是同样的提示啊。。。难道我的内存卡没有mount?难道我的图片存到了系统空间,我没有权限读?bla bla bla

后来找大神要了段代码,发现跟我写的一样,同样报错。。。
知道后来又搜到了这篇文章:
《Android之EACCES (Permission denied)与Permission denied异常探密》
当中的第二条,permission写的地方不对,检查了我的manifest发现我的permission节写在了application里面(为什么当初我要这么做?我也不知道,为什么别的permission没有报错,我tm怎么知道),然后把所有permission拿出来放到与application平级,终于报的错不一样啦。。。。
java.net.ProtocalException Does not support outputOK,另一个坑走起。

 

Leave a Reply

Your email address will not be published. Required fields are marked *

注意: 评论者允许使用'@user空格'的方式将自己的评论通知另外评论者。例如, ABC是本文的评论者之一,则使用'@ABC '(不包括单引号)将会自动将您的评论发送给ABC。使用'@all ',将会将评论发送给之前所有其它评论者。请务必注意user必须和评论者名相匹配(大小写一致)。