1. 程式人生 > >android獲取網頁介面JSON資料

android獲取網頁介面JSON資料

新建一個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();