問題
軟件開發(fā)一直放在安卓2.3上跑仇矾,木有問題出現(xiàn)入热,然而放在5.1的手機(jī)上出現(xiàn)了異常拍棕,獲取不到網(wǎng)絡(luò)數(shù)據(jù),(╥╯^╰╥)嗯勺良,心理咯噔咯噔绰播,開始查錯(cuò)誤········
經(jīng)過不懈努力,找到根源啦尚困。(~ ̄▽ ̄)~
HttpURLConnection.getInputStream();這句話返回的是null蠢箩,
為啥呢,服務(wù)器木有問題啊事甜∶冢⊙(?◇?)?
后頭了解到逻谦,谷歌工程師為了安全掌实,規(guī)定連接網(wǎng)絡(luò)這個(gè)耗時(shí)的操作要放到一個(gè)新線程里去運(yùn)行。這是4.0更新的新特性邦马。贱鼻。
( ,,′?ω?)ノ"(′っω?`。)
好啦滋将,這下知道是什么事了邻悬。
先上原代碼:
public void click(View view){
URL url = new URL(path);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
// 設(shè)置請(qǐng)求方式為"GET"
conn.setRequestMethod("GET");
// 超時(shí)響應(yīng)時(shí)間為5秒
conn.setConnectTimeout(5000);
//獲取服務(wù)器返回的狀態(tài)碼
int code=conn.getResponseCode();
//成功
if(code==200){
//這里inputStream是null
InputStream inputStream = conn.getInputStream();
}
}
方案
- 方法一:把可惡的他扔進(jìn)子線程
如下操作:
public void click(View view){ new Thread(new Runnable() { @Override public void run() { URL url = new URL(path); HttpURLConnection conn = (HttpURLConnection) >>url.openConnection(); // 設(shè)置請(qǐng)求方式為"GET" conn.setRequestMethod("GET"); // 超時(shí)響應(yīng)時(shí)間為5秒 conn.setConnectTimeout(5000); //獲取服務(wù)器返回的狀態(tài)碼 int code=conn.getResponseCode(); //成功 if(code==200){ //已解決 InputStream inputStream = conn.getInputStream(); } }).start(); }
- 方法二
把Mainfest.XML文件的targetSdkVersion =xx去掉就可。
不過推薦方法一啦随闽,根據(jù)新特性規(guī)范代碼嘛··( ̄▽ ̄)~*