2012-12-13 48 views
0

我想解析在Android應用程序中使用FQL從Facebook API獲取的結果(JSON)。使用FQL解析來自Facebook的JSON數據時出錯

我已經能夠解析所有的結果集,除了這部分的:

[10151392619250579,10151392618640579,10151392618590579,10151392618785579,10151392618835579,10151392618885579,10151392619010579,10151392619155579] 

的FQL查詢我想提出的是:

SELECT app_data FROM stream WHERE filter_key in (SELECT filter_key FROM stream_filter WHERE uid = me() AND type = 'newsfeed') AND is_hidden = 0 LIMIT 200 

它返回這樣的結果:

{ 
    "app_data": { 
     "attachment_data": "[]", 
     "images": "[10151392619250579,10151392618640579,10151392618590579,10151392618785579,10151392618835579,10151392618885579,10151392619010579,10151392619155579]", 
     "photo_ids": [ 
      "10151392619250579", 
      "10151392618640579", 
      "10151392618590579", 
      "10151392618785579", 
      "10151392618835579", 
      "10151392618885579", 
      "10151392619010579", 
      "10151392619155579" 
     ] 
    } 
} 

這是我用來獲取數據的代碼:

// GET THE APP DATA 
if (JOFeeds.has("app_data")) { 
    String strAppData = JOFeeds.getString("app_data"); 

    if (strAppData.equals("[]")) { 
     // DO NOTHING 
    } else { 

     JSONObject JOAppData = new JSONObject(strAppData); 

     if (JOAppData.has("photo_ids")) { 
      String strPhotoIDS = JOAppData.getString("photo_ids"); 

      JSONArray JAPhotoIDS = new JSONArray(strPhotoIDS); 
      Log.e("JAPhotoIDS", JAPhotoIDS.toString()); 

      for (int j = 0; j < JAPhotoIDS.length(); j++) { 
       JSONObject JOPhotoIDS = JAPhotoIDS.getJSONObject(j); 
       Log.e("PHOTO IDS", JOPhotoIDS.toString()); 
      } 
     } 

    } 
} 

然而,logcat中,總是顯示此錯誤:

12-13 15:54:36.390: W/System.err(5841): org.json.JSONException: Value 10151392619250579 at 0 of type java.lang.Long cannot be converted to JSONObject 

顯然我錯了,在編碼。任何人都可以提供什麼適當的方法/代碼應該是什麼建議?

回答

2

你在哪裏解析photo_ids是錯誤的部分,應該是這樣的:

if (JOAppData.has("photo_ids")) { 
     JSONArray JAPhotoIDS = JOAppData.getJSONArray("photo_ids"); 
     Log.e("JAPhotoIDS", JAPhotoIDS.toString()); 

     for (int j = 0; j < JAPhotoIDS.length(); j++) { 
      String id = JAPhotoIDS.getString(j); 
      Log.e("PHOTO IDS", id); 
     } 
    } 
+0

我的我的。我現在已經呆了5個多小時了,而你所花的時間只有一分鐘。你是先生,是一個巫師。 :-) – SSL

+0

似乎有一個計時器,我可以接受這個答案。那我可以問一個跟進問題嗎? – SSL

+0

很高興我能幫忙,當然 – Nermeen

1

你JSONArray JAPhotoIDS包括Long(不JSONObject的)陣列。 因此,而不是使用

JSONObject JOPhotoIDS = JAPhotoIDS.getJSONObject(j); 

使用

Long lPhotoIDS = JAPhotoIDS.getLong(j); 
+0

+1。爲_almost_釘它。也許這是我的錯,因爲沒有提到我需要以String的形式提取數據。 – SSL