问题
软件开发一直放在安卓2.3上跑,木有问题出现,然而放在5.1的手机上出现了异常,获取不到网络数据,(╥╯^╰╥)嗯,心理咯噔咯噔,开始查错误········
经过不懈努力,找到根源啦。(~ ̄▽ ̄)~
HttpURLConnection.getInputStream();这句话返回的是null,
为啥呢,服务器木有问题啊。⊙(?◇?)?
后头了解到,谷歌工程师为了安全,规定连接网络这个耗时的操作要放到一个新线程里去运行。这是4.0更新的新特性。。
( ,,´•ω•)ノ"(´っω•`。)
好啦,这下知道是什么事了。
先上原代码:
public void click(View view){
URL url = new URL(path);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
// 设置请求方式为"GET"
conn.setRequestMethod("GET");
// 超时响应时间为5秒
conn.setConnectTimeout(5000);
//获取服务器返回的状态码
int code=conn.getResponseCode();
//成功
if(code==200){
//这里inputStream是null
InputStream inputStream = conn.getInputStream();
}
}
方案
- 方法一:把可恶的他扔进子线程
如下操作:
public void click(View view){ new Thread(new Runnable() { @Override public void run() { URL url = new URL(path); HttpURLConnection conn = (HttpURLConnection) >>url.openConnection(); // 设置请求方式为"GET" conn.setRequestMethod("GET"); // 超时响应时间为5秒 conn.setConnectTimeout(5000); //获取服务器返回的状态码 int code=conn.getResponseCode(); //成功 if(code==200){ //已解决 InputStream inputStream = conn.getInputStream(); } }).start(); }
- 方法二
把Mainfest.XML文件的targetSdkVersion =xx去掉就可。
不过推荐方法一啦,根据新特性规范代码嘛··( ̄▽ ̄)~*