1

私はFacebookSDKを使用していて、親関数の変数を変更しようとしています(少なくともそれを呼び出します)。

変数「actor」(マーク)を変更するにはどうすればよいですか?

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();
                                         }
                                     }
                                }
                            });
                        }
                    }
                }
            }
        }
    );
}
4

1 に答える 1

1

ネストされた内部クラス内のfinal変数にのみアクセスできます。ただし、その秘訣は、オブジェクトへの参照が最終的なものである可能性があることですが、オブジェクトの状態は変更できます。

あなたは次のようなことをすることができます、

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

これはあなたが尋ねた問題を解決します。ただし、おそらくより良い方法は、Request.Callbackを使用せず、代わりにCallbackを使用せずにRequestを作成してから、

request.executeAndWait() 

executeAndWait()は、アクターにデータを設定するために使用できるResponseオブジェクトを返します。

于 2013-03-05T06:00:28.587 に答える