2015-12-04 47 views
0

我在Facebook的代碼中使用了arraylist的問題。全局變量在Facebook的GraphRequest後丟失值 - android

//this are global variable 
HashMap<String,String> postsMap = new HashMap<>(); 
ArrayList<HashMap<String, String>> list = new ArrayList<>(); 
... 
private void retrievePosts() { 
GraphRequest postsRequest = new GraphRequest(
      AccessToken.getCurrentAccessToken(), 
      "/{page-id}/", 
      null, 
      HttpMethod.GET, 
      new GraphRequest.Callback() { 
       public void onCompleted(GraphResponse response) { 
        Log.d("Facebook: ", response.toString()); 

        try { 
         JSONObject jobj = response.getJSONObject().getJSONObject(TAG_POST); 
         JSONArray posts = jobj.getJSONArray(TAG_DATA); 

         for (int i = 0; i < posts.length(); i++) { 
          JSONObject c = posts.getJSONObject(i); 

          String message = c.getString(TAG_MESSAGE); 
          String createdTime = c.getString(TAG_CREATION); 

          map.put(TAG_MESSAGE, message); 
          map.put(TAG_CREATION, createdTime); 


          list.add(postsMap); 

         } 

        } catch (JSONException e) { 
         e.printStackTrace(); 
        } 
       } 
      }); 
    Bundle parameters = new Bundle(); 
    parameters.putString("fields", "posts.limit(20)"); 
    postsRequest.setParameters(parameters); 
    postsRequest.executeAsync(); 
} 

當我嘗試看看什麼是列表Facebook的方法調用中,我可以看到正確的元素中,但在方法結束我的ArrayList成爲空 公共類的Facebook {。 我該如何解決這個問題?

回答

0

我發現了一個分辨率爲我問題。 問題是我在主線程中執行了一個asyncTask。我決定以這樣的方式

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.list_view); 

    new RetrievePosts().execute(); 

} 
class RetrievePosts extends AsyncTask<String, String, String> { 

    @Override 
    protected String doInBackground(String... params) { 
     GraphRequest postsRequest = new GraphRequest(
     AccessToken.getCurrentAccessToken(), 
     "/{page-id}/", 
     null, 
     HttpMethod.GET, 
     new GraphRequest.Callback() { 
      public void onCompleted(GraphResponse response) { 
       Log.d("Facebook: ", response.toString()); 
       //my stuff 
      } 
     }); 
Bundle parameters = new Bundle(); 
parameters.putString("fields", "posts.limit(20)"); 
postsRequest.setParameters(parameters); 
postsRequest.executeAndWait(); 
} 

我已經改變.executeAsynk()與方法.executeAndWait(),因爲我已經的AsyncTask我。

0

如果我沒有記錯的話,你的HashMap應與

HashMap<String,String> postsMap = new HashMap<String,String>(); 

,那麼你應該用你的電話你postsMap變量初始化爲put()

postsMap.put(TAG_MESSAGE, message); 
postsMap.put(TAG_CREATION, createdTime); 
+0

我在我的應用程序中寫了正確的構造函數,這是一個複製錯誤。 – Daniel