[ 開放資料part2 ] [android] 非同步的網路工作來取得JSON字串吧
有時候我們有許多數據需要透過JSON字串的方式整理,
現在就讓我們透過非同步的方式來看看吧!
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的連結寫在onPostExecutepublic 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.接著就來執行看看吧耶~這樣就成功了!







留言
張貼留言