2016-02-27 20 views
0

我正在使用Facebook的Graph API,我试图让表面层的JSON对象更深。我怎样才能正确地做到这一点?Android从Facebook获取深层JSON对象GraphRequest

JSON对象看起来是这样的:

{ 
    "id": "#############", 
    "name": "Page Name", 
    "picture": { 
     "data": { 
      "is_silhouette": false, 
      "url": "https://scontent.xx.fbcdn.net/hprofile-xap1/v/t1.0-1/p50x50/76818_139533536097297_144033_n.jpg?oh=9caa264df8b15feb6ecdjeajks9d43ee05bc22&oe=5750EE78" 
     } 
    } 
} 

(网址是不是在这个例子中一个真正的URL)

我已经试过这样:

new GraphRequest.GraphJSONObjectCallback() { 
    @Override 
     public void onCompleted(JSONObject object, GraphResponse response) { 
      facebook_name.setText("Logged in as " + object.optString("name")); 
      try { 
       JSONArray pictureArray = object.getJSONArray("picture"); 
       for (int i = 0; i < pictureArray.length(); i++) { 
        JSONObject picture = pictureArray.getJSONObject(i); 
        JSONArray pictureDataArray = picture.getJSONArray("data"); 
        for (int j = 0; j < pictureDataArray.length(); j++) { 
         JSONObject pictureData = pictureDataArray.getJSONObject(j); 
         String pictureDataURL = pictureData.optString("url"); 
         Log.d("*******************", pictureDataURL); 
        } 
       } 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 
     } 
    }); 

但我米没有得到我的Log.d回来。我是否错误地遍历了这个?有没有更简单的方法来做到这一点?

回答

0

我找到了答案。我只需要保持对穿线对.getJSONObject()保持下去较低找到我要找:

String pictureURL = object.getJSONObject("picture").getJSONObject("data").getString("url"); 
+0

这是更好地使用GSON或改造转换JSON响应转换成Java类。 – yueyueqi

+0

@yueyueqi,请你解释一下为什么会更好?这是我找到的最简单的方法。但我想知道为什么会更好。谢谢 – ntgCleaner

+0

因为它会为你做JSON解析,比如处理那些JSONArray/JSONObjects。你需要做的是定义Java类并关注逻辑。 – yueyueqi