顯示廣告
隱藏 ✕
看板 KnucklesNote
作者 Knuckles (站長 那克斯)
標題 [AndroidStudio] JSONObject 使用方法
時間 2016-02-01 Mon. 12:37:25


JSON資料的用法

例如JSON檔為 http://disp.cc/api/hot_text.json
這是由 Server 端產生的 API,裡面的資料格式要由網頁後端程式(例如PHP)來產生
在這邊他的格式是像這樣
{ "err":0, "list":[row1, row2, ..., rowN] }
最外層是一個JSON物件,裡面有兩個值
"err" 是代表產生的檔案有沒有錯誤,沒問題的話就是 0
"list" 為一個JSON陣列,裡面存了N個JSON物件,記錄了每篇熱門文章的資料
       每個JSON物件格式是像這樣
       row1 = {"hot_num":"100","bi":"163","ti":"7Zf3","title":"文章標題","board_name":"看板名稱","author":"作者帳號","desc":"文章摘要","img_list":["縮圖網址1","縮圖網址2","縮圖網址3"]}
       hot_num 是這篇文章目前的人氣值
       bi 是看板的編號, ti是文章的編號, 文章的網址為 http://disp.cc/m/{bi}-{ti}

使用 AsyncHttpClient 下載JSON檔
        AsyncHttpClient client = new AsyncHttpClient();
        client.get(urlString, new JsonHttpResponseHandler() {
            @Override
            public void onSuccess(int statusCode, Header[] headers, JSONObject response) {
                Log.d("JSONObject response", response.toString());
            }

            @Override
            public void onFailure(int statusCode, Header[] headers, Throwable e, JSONObject error) {
                Log.e("JSONObject response", statusCode + " " + e.getMessage());
            }
        });

在 java 程式中,我們用了 JSONObject response 來儲存整個 JSON 檔
使用 response.toString() 可將 JSONObject 轉成字串顯示在 logcat

要判斷JSON物件裡是否有某個索引值,例如有沒有"err",可以用
response.has("err")

要判斷"err"是否非0,可以用
if( response.has("err") && response.optInt("err")!=0 ){ 
    Log.e("error","下載資料有誤"); 
}
若是沒有"err"這個索引,使用 .optInt("err") 會回傳 0

如果是用true或false的話,要用optBoolean
例如 if( response.optBoolean("isSuccess") ){ ... }

如果要取出裡面的JSON陣列"list",可以用
JSONArray list = response.optJSONArray("list");
若不存在"list"這個索引,使用 .optJSONArray("list") 會回傳 null

若取得的JSON陣列list為null,要用return跳出函式
避免執行到後面的 list.optJSONObject(),不然會閃退
if(list==null){
    Toast.makeText(getApplicationContext(),"Data error", Toast.LENGTH_LONG).show();
    return;
}

要取出JSON陣列"list"裡的第一個JSON物件 Row1,可以用
JSONObject row1 = list.optJSONObject(0);
若索引值錯誤,使用 .optJSONObject(0) 會回傳 null

要取出JSON物件 Row1 裡的一個字串,例如title,可以用
String title = row1.optString("title");
若不存在索引值 "title",使用 .optString("title") 會回傳空字串 ""




--
※ 作者: Knuckles 時間: 2016-02-01 12:37:25
※ 編輯: Knuckles 時間: 2016-08-22 03:58:25
※ 看板: KnucklesNote 文章推薦值: 0 目前人氣: 0 累積人氣: 1342 
r)回覆 e)編輯 d)刪除 M)收藏 ^x)轉錄 同主題: =)首篇 [)上篇 ])下篇