2013-03-05 40 views
1

我正在使用Facebook的sdk,並且試圖修改父函數中的變量(這就是我至少稱之爲的)。使用回調訪問父變量

我該如何修改變量「演員」(標記)?

public void getUserFeed(int limit) { 
    String q = ""; // query taken out 
    Bundle params = new Bundle(); 
    params.putString("q", q); 
    Session session = Session.getActiveSession(); 
    Request request = new Request(session, 
     "/fql",       
     params,       
     HttpMethod.GET, 
     new Request.Callback(){  
      public void onCompleted(Response response) { 
       GraphObject graphObject = response.getGraphObject(); 
       if (graphObject != null) { 
        JSONObject jsonObject = graphObject.getInnerJSONObject(); 
        try { 
         JSONArray array = jsonObject.getJSONArray("data"); 
         for (int i = 0; i < array.length(); i++) { 
         String q = "" // query taken out 
         Bundle params = new Bundle(); 
         params.putString("q", q); 
         String actor = ""; // Trying to access this variable ******* 
         Session session = Session.getActiveSession(); 
         Request request2 = new Request(session, 
          "/fql",       
          params,       
          HttpMethod.GET, 
          new Request.Callback(){  
           public void onCompleted(Response response) { 
            GraphObject graphObject = response.getGraphObject(); 
            //String s = textViewResults.getText().toString(); 
            if (graphObject != null) { 
             JSONObject jsonObject = graphObject.getInnerJSONObject(); 
             try { 
              JSONArray array = jsonObject.getJSONArray("data"); 
              for (int i = 0; i < array.length(); i++) { 
               JSONObject object = (JSONObject) array.get(i); 
               actor = object.getString("name"); // Trying to access "actor" here ******* 
              } 
             } catch (JSONException e) { 
              e.printStackTrace(); 
             } 
            } 
           } 
          }); 
         } 
        } 
       } 
      } 
     } 
    ); 
} 

回答

1

只能訪問一個嵌套的內部類中最終變量。訣竅在於對象的引用可能是最終的,但對象狀態可以被修改。

你坎託做這樣的事情,

AtomicReference actorRef = new AtomicReference(""); 
.... 
    public void onCompleted(Response response) { 
      .... 
      actorRef.set(object.getString("name")); 

這解決了你問這個問題。然而,可能是一個更好的辦法做的是不使用Request.Callback,而是不使用回調創建一個請求,然後調用

request.executeAndWait() 

executeAndWait()將返回您可以使用一個Response對象填充演員。