Android Studio 專案結合JSON網站服務
第二步:取得JSON字串(非網路)
1.至JSON暫存網站,進行檔案測試
以 myjson.com 為例,連結後打上資料生成網址,要在專案當中使用
[
{
"name": "Kangkai",
"number": "666 555-1234"
},
{
"name": "Handsome",
"number": "777 555-5678"
}
]
2.至Android Studio進行連結
回到Android Studio,先開啟網路權限,因為Json是來自於網路服務的回傳結果。
打開AndroidManifest.xml檔案,輸入開啟網路權限的程式碼:
<uses-permission android:name="android.permission.INTERNET"/>
另外新建一個class檔,必須繼承至AsyncTask<傳入值型態, 更新進度型態, 結果型態>。
加入程式碼,並匯入元件、產生實作方法。
public class 你的class名稱 extends AsyncTask<String,Void,String>
宣告待會需要用到的變數,並匯入需要的元件。輸入以下程式碼:
String data = "";
InputStream inputStream = null;
doInBackground方法的內容,輸入以下程式碼
try { URL url = new URL(urlStrings[0]);
HttpURLConnection httpURLConnection =
(HttpURLConnection) url.openConnection();
InputStream inputStream = httpURLConnection.getInputStream();
BufferedReader bufferedReader =
new BufferedReader(new InputStreamReader(inputStream));
String line = "";
while (line != null) {
line = bufferedReader.readLine();
data = data + line;
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return data;
再輸入onPostExecute方法,與UI做連結。
protected void onPostExecute(String data){
super.onPostExecute(data);
MainActivity.tv.setText(data);
移至res > layout,打開activity_main.xml檔案
可用textview元件顯示json的資料
在maicActivity加入程式碼public class MainActivity extends AppCompatActivity {
public static TextView tv;
@Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv = findViewById(R.id.txtJsonData);
String url = "https://api.myjson.com/bins/1epgcy";
GetNetworkJson process = new GetNetworkJson();
process.execute(url);
}
完成。
第三步:取得JSON字串(網路)
1/在專案找到build.gradle(Module:app)檔案,輸入程式碼,並點擊同步。implementation 'com.android.volley:volley:1.1.0'
2.開始讀取opendata
MainActivity.java,在oncreate()以外輸入程式碼
private String getData(String urlString){
String result = "";
JsonObjectRequest jsonObjectRequest =
new JsonObjectRequest(urlString,null,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
Log.d("回傳結果", "結果=" + response.toString());
try {
parseJSON(response);
}catch (JSONException e){
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override public void onErrorResponse(VolleyError error) {
Log.e("回傳結果","錯誤訊息:"+ error.toString());
}
});
Volley.newRequestQueue(this).add(jsonObjectRequest);
return result;
到activity_main.xml,增加一個listview,並設定ID與其它屬性
在oncreate()增加程式碼,Layout的ListView,讓getData()抓到網址
String result = "";
JsonObjectRequest jsonObjectRequest =
new JsonObjectRequest(urlString,null,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
Log.d("回傳結果", "結果=" + response.toString());
try {
parseJSON(response);
}catch (JSONException e){
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override public void onErrorResponse(VolleyError error) {
Log.e("回傳結果","錯誤訊息:"+ error.toString());
}
});
Volley.newRequestQueue(this).add(jsonObjectRequest);
return result;
到activity_main.xml,增加一個listview,並設定ID與其它屬性
最後設置json資料顯示在listview的格式
留言
張貼留言