[ 開放資料part2 ] [android] 非同步的網路工作來取得JSON字串吧

有時候我們有許多數據需要透過JSON字串的方式整理,

現在就讓我們透過非同步的方式來看看吧!

step0.輸入所需的json字串,獲得臨時API



step1.開啟網路權限
在AndroidManifest.xml中開啟網路權限
<uses-permission android:name="android.permission.INTERNET"/>


step2.建立新的class(GetNetworkJson)
由於無線網路很難保證穩定與速度,所以日前網路相關工作常使用非同步任務(AsyncTask)來進行存取,一方面不影響原本UI操作,一方面可以在背景慢慢下載網路資源。

在java下建立新class,名稱為 GetNetworkJson ,繼承AsyncTask。


step3.在GetNetworkJson檔上方匯入所需要的API元件


step4.寫入工作內容
將工作寫在doInBackground方法中,將與UI的連結寫在onPostExecute


public class GetNetworkJson extends AsyncTask <String, Void, String>{


        String data = "";
        InputStream inputStream = null;
        private URL url;


    @Override        protected String doInBackground(String... urlStrings) {
            try{
                URL rul = new URL(urlStrings[0]);
                HttpsURLConnection httpURLConnection = (HttpsURLConnection) url.openConnection();
                InputStream inputStream = httpURLConnection.getInputStream();
                BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
                String line = "";
                while(line != null){
                    line = bufferedReader.readLine();
                    data = data + line;
                }
                // 如果要直接拆 JSON 可以在這裡
            }catch(MalformedURLException e){

                e.printStackTrace();

            }catch(IOException e){

                e.printStackTrace();
            }
            return data;
        }

        @Override        protected void onPostExecute(String data){
            super.onPostExecute(data);
            MainActivity.tv.setText(data); // 如果要直接影響UI的某一元素,則寫在這裡
        }

    }


step5.在activity_main.xml中,建立一個TextView
將TextView的id命名為tv(這裡的TextView tv,是用來findViewById與layout相連結的)




step6.在MainActivity中,寫入工作內容

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
            tv = findViewById(R.id.tv);
            String url = "https://api.myjson.com/bins/1cigau";
           GetNetworkJson process = new GerNetworkJson();
           process.execute(url);
        }



step7.接著就來執行看看吧


耶~這樣就成功了!


留言

這個網誌中的熱門文章

[unity2D] 透過鍵盤進行上下左右移動

[unity 2D] 簡單認識button(上)

[ 開放資料part1 ] [android] 利用EXCEL檔案格式來取得開放資料吧