2012-10-24 110 views
2

我想要獲取用戶的封面照片並將其顯示在佈局頂部。我使用AsyncTask來運行Facebook的API調用。我使用來獲取Facebook的數據的代碼Android - Facebook API給用戶封面照片的空結果

JSONObject json = null; 
response = Utility.facebook.request("me?fields=cover"); 
json = Util.parseJson(response); 

是停止線程來自於後續工序的JSON錯誤,因爲返回的JSON是空的,即使請求通過清除異常。我可以只使用「我」或「我/相冊」或除「me?fields = cover」之外的其他任何東西來獲得正確的json。當我註釋掉最後一行時,'嘗試'過程完成,沒有例外/錯誤。

Facebook API有什麼問題嗎?或者我做錯了什麼?

+0

你得到了什麼迴應?它只是{「數據」:[]}? –

+0

我甚至覺得我沒那麼多。我得到一個json行0錯誤,當我在文本視圖中顯示字符串時,它是空的。 – Wenger

回答

1

我個人更喜歡在處理用戶配置文件時使用FQL。如果您想嘗試使用FQL,請檢查以下代碼片段。如果你想堅持到圖形API,看到這樣的回答:https://stackoverflow.com/a/12434640/450534

try { 
    String query = "SELECT pic_cover FROM user where uid = " + PUT_THE_USER_ID_HERE; 
    Bundle param = new Bundle(); 
    param.putString("method", "fql.query"); 
    param.putString("query", query); 

    String response = Utility.mFacebook.request(param); 

    JSONArray JAUser = new JSONArray(response); 

    for (int i = 0; i < JAUser.length(); i++) { 
     JSONObject JOUser = JAUser.getJSONObject(i); 

     // COVER PHOTO 
     if (JOUser.has("pic_cover")) { 

      String getCover = JOUser.getString("pic_cover"); 

      if (getCover.equals("null")) { 
       String finalCover = null; 
      } else { 
       JSONObject JOCoverSource = JOUser.optJSONObject("pic_cover"); 

       if (JOCoverSource.has("source")) { 
        String finalCover = JOCoverSource.getString("source"); 
       } else { 
        String finalCover = null; 
       } 
      } 

     } else { 
      String finalCover = null; 
     } 
    } 

} catch (Exception e) { 
    // TODO: handle exception 
} 

上面的代碼已經佔用戶不必在自己的個人資料,併爲它的可用性檢查一個封面照片集誰。通過此代碼,您可以在Cover Photo上找到URL,然後按照您的偏好進行處理。

注:如果您獲取登錄的用戶的封面照片,這段代碼SELECT pic_cover FROM user where uid = " + PUT_THE_USER_ID_HERE;也可以寫爲:SELECT pic_cover FROM user where uid = me()";對於非登錄用戶的封面照片,上面可以直接使用。

作爲旁註的一些事情。

  1. 我使用Fedor's懶惰加載技術幾乎完全加載圖像。
  2. 我建議在AsyncTask中運行您選擇的代碼塊,我的或任何其他解決方案。
+0

感謝您的回覆。我想過使用FQL,但Graph似乎更簡單,更容易,這讓我相信它會更好。您是否有理由更喜歡將FQL用於用戶配置文件或僅僅是一般?今晚我會試試這個方法。 – Wenger

+0

@溫格:沒什麼特別的原因。當我盯着Facebook API時,我對SQL查詢很滿意,因此我更喜歡FQL。我確實使用圖形API調用提要和東西,但主要是FQL。我也有一個Graph API方法鏈接到我的答案之一。它與傳統的Graph API調用有點不同,但每次都像魅力一樣。我在我的應用程序中使用該慣例進行無盡列表的分頁。 –

1

其原因沒有得到任何結果可以在請求的Javadoc(字符串graphPath)方法中找到:

(...)該方法等待網絡響應,所以塊不 在UI線程中調用它。

在你的情況,你應該做到以下同步調用:

Bundle params = new Bundle(); 
params.putString("fields", "cover"); 
String result = Utility.facebook.request("me/", params); 

亞洲時報Siddharth樂樂是他的回答非常正確的,但我想指定沒有得到這個任何迴應的實際原因案件。

+0

這隻會返回封面照片的對象ID。它不會返回封面照片的網址。 –

0

注意:使用Facebook API和端點https://graph.facebook.com/me?fields=cover獲取封面照片不再像2014年12月20日那樣工作。

它應該給予以下回應:

{ 
    "cover": { 
    "cover_id": "10151008748223553", 
    "source": "http://sphotos-a.ak.fbcdn.net/hphotos-ak-ash4/s720x720/391237_10151008748223553_422785532_n.jpg", 
    "offset_y": 0 
    }, 
    "id": "19292868552" 
} 

但現在用戶id只是給:此使用Graph Tool explorer v2.2使用me?fields=cover

{ 
    "id": "19292868552" 
} 

驗證。

相關問題