android獲取網頁介面JSON資料
阿新 • • 發佈:2019-02-07
新建一個HtmlService類,新增靜態方法:getHtml,大概步驟如下:
HttpURLConnection物件開啟連結並獲取原始碼,然後再寫一個readInputStream函式讀取資料寫入字串,最後renturn 字串。
public class HtmlService {
public static String getHtml(String path) throws Exception {
URL url = new URL(path);
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
conn.setRequestMethod("GET" );
conn.setConnectTimeout(5 * 1000);
InputStream inStream = conn.getInputStream();//通過輸入流獲取html資料
byte[] data = readInputStream(inStream);//得到html的二進位制資料
String html = new String(data, "UTF-8");
return html;
}
public static byte[] readInputStream(InputStream inStream) throws Exception{
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len = 0;
while( (len=inStream.read(buffer)) != -1 ){
outStream.write(buffer, 0, len);
}
inStream.close();
return outStream.toByteArray();
}
}
新增聯網許可權:
一開始老是連線失敗,經過百度,需要新增聯網許可權
AndroidManifest.xml
新增一行<uses-permission android:name="android.permission.INTERNET"/>
即可聯網成功。
其他要注意的地方:
最後測試的時候,發現還是會出現錯誤,原因大概是不能在主執行緒裡面進行聯網操作。理由就是會阻塞主執行緒變得很卡(安卓4.0以後)。
所以呼叫的時候要新開一個子執行緒。
Thread thread=new Thread(new Runnable() {
@Override
public void run() {
try {
html = HtmlService.getHtml("https://api.heweather.com/x3/weather?cityid=CN101010100&key=1");
Log.i("jsonData",html);
} catch (Exception e) {
e.printStackTrace();
}
tv_Json.post(new Runnable() {
@Override
public void run() {
tv_Json.setText(html);
}
});
}
});
thread.start();