須先引用以下
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
//檢查網路連線狀況
public void chkNetwork(){
ConnectivityManager connMgr = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
if (networkInfo != null && networkInfo.isConnected()) {
Log.d("CHECK_POINT", "網路連線中 " );
textView1.setText("網路連線中");
//呼叫AsyncTask
new DownloadWebpageTask().execute();
} else {
Log.d("CHECK_POINT", "網路斷線 ");
textView1.setText("網路斷線");
}
}
//使用AsyncTask,因為Android4.0之後,網路操作必須放在Thread裡執行,AsyncTask後面的三個參數為1.Params,啟動任務執行的輸入參數2.Progress,後台任務執行的百分比3.Result,後台計算的結果類型,假如一個類型不被使用,可以簡單地使用 Void類型
private class DownloadWebpageTask extends AsyncTask<Void,Integer,String[]>
{
@Override
//要在背景中做的事
protected String[] doInBackground(Void... params) {
try {
return getWebData();
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
//@Override
//背景工作處理完"後"需作的事
protected void onPostExecute(String[] result) {
super.onPostExecute(result);
textView1.setText(result[1]);
//進度BAR消失
ProgressBar pb=(ProgressBar)findViewById(R.id.progressBar);
pb.setVisibility(-1);
}
//取得網路資料
public String[] getWebData() throws IOException{
URL url=new URL("http://XXX.XXX.XXX.XXX");
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
conn.setReadTimeout(10000 /* milliseconds */);
conn.setConnectTimeout(15000 /* milliseconds */);
conn.setRequestMethod("GET");
conn.setDoInput(true);
conn.connect();
BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
String jsonString= reader.readLine();
reader.close();
try {
return (getJson(jsonString));
} catch (JSONException e) {
e.printStackTrace();
return null;
}
}
//JSOM
//將JSON字串解析
public String[] getJson(String jsonString) throws JSONException {
//如果是巢狀JSON字串,須分兩次來取資料
JSONObject jsonObject=new JSONObject(jsonString);
JSONObject jsonObject2=new JSONObject(jsonObject.getString("JsonString"));
JSONArray jsonArray=jsonObject2.getJSONArray("PROGTAB");
String[] jsonString2=new String[jsonArray.length()];
delDb();
for(int i=0;i<jsonArray.length();i++)
{
//Log.d("DEBUG_TAG", String.valueOf(i));
jsonString2[i]=jsonArray.getJSONObject(i).getString("@PLAYDT").substring(11,16)+" "+jsonArray.getJSONObject(i).getString("@PROGNAME");
}
return jsonString2;
}
在AndroidManifest.xml裡要加上以下權限,才能取得網路資料
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
沒有留言:
張貼留言