2011-07-27 24 views
2

在我的應用程序,我得到了用戶的朋友與以下:得到朋友的名字列表和ID快速

https://graph.facebook.com/me?fields=id,name&access_token=xxxx

上面實際上是由Facebook的Android SDK中完成的,所以我實際上是創建這樣的請求:

Bundle params = new Bundle(); 
    params.putString("fields", "name,id"); 
    asyncFacebookRunner.request("me/friends", params, "GET", listener, null); 

我解析這樣JSON響應:

  JSONObject data = Util.parseJson(response); 
      JSONArray friendsData = data.getJSONArray("data"); 
      mDbAdapter.deleteAllFriends(); 

      for (int i = 0; i < friendsData.length(); i++) { 
       JSONObject friend = friendsData.getJSONObject(i); 
       mDbAdapter.addFriend(friend.getString("name"), 
         friend.getString("id")); 
      } 

Util類是Facebook Android SDK的一部分。

在我的帶有wifi的Android手機上,發送,檢索和解析響應需要大約15-20秒(我的帳戶大約有370個朋友)。我見過其他幾個應用程序在2秒內完成它。什麼讓我放慢腳步?

+0

也許它由於連接速度。您可以使用線程加速更多,具體取決於可能的線程。或優化實施。 –

+0

它比其他應用程序慢10到15倍,在相同的WiFi網絡上使用相同的手機。 – Tenfour04

+0

然後優化該方法。你確定你正在做同樣的操作嗎?嘗試在ui上對不需要更新的處理進行線程化,或者在可能的情況下使用線程 –

回答

3

延遲的唯一原因是我認爲是數據庫適配器,即在解析結果時添加項目。

要優化了一下,可以去除一些任務在你的循環,並通過一個單一的請求中的數據添加到數據庫:

JSONObject json = Util.parseJson(response); 
JSONArray friendsData = json.getJSONArray("data"); 
String ids[] , names[] = new String[friendsData.length()]; 
for(int i = 0; i < friendsData .length(); i++){ 
     ids[i] = friendsData .getJSONObject(i).getString("id"); 
     names[i] = friendsData .getJSONObject(i).getString("name"); 
     } 

//TODO Add data to your database 
+0

這是一個oldie。我使用你發佈的解決方案來修復它。隨着約400名朋友的名單,時間從約15秒到三秒。忘了回來,自己回答,謝謝! – Tenfour04