0

以下のコードのように、パラメーターとして呼び出されるメソッド witch があります...私のコードでは、Oncomplete メソッドの外側でパラメーター「arry」を使用する必要があります..それを達成できる方法はありますか??

 Request request = new Request(session,
            "/fql",                         
            params,                         
            HttpMethod.GET,                 
            new Request.Callback(){         
                public void onCompleted(Response response) {
                    String arry = graphObject.getProperty("data").toString();
                }
            }
4

2 に答える 2

4

Request.Callback を拡張 (実装) するクラスを作成し、メソッドに渡します。
このクラスは文字列の配列を格納できます。

class RequestCallback extends Request.Callback {
    private String arry;

    public String getArry() {
      return arry;
    }

    public void inCompleted(Response response) {
      this.arry = graphObject.getProperty("data").toString();
    }
}

それで:

RequestCallback callback = new RequestCallback();
Request request = new Request(session, "/fql", params, HttpMethod.GET, callback);
...
// after the request is completed
callback.getArry(); // and use it.
于 2013-03-16T11:50:11.993 に答える
1

まず、コールバック内で必要なことは何でも行うことをお勧めします。APIは何らかの理由でそのように設計されているようです。おそらくパフォーマンス。どうやら非同期onCompleted()で呼び出されます。その結果、(ローカル変数を使用して)リターンの直後にアクセスしようとすると、値はまだ null です。arrynew Request()final

しかし、まだそれを行う必要がある場合は、ここで簡単な方法があります。

final String result = null;
final CountDownLatch latch = new CountDownLatch(1);

Request request = new Request(session,
            "/fql",                         
            params,                         
            HttpMethod.GET,                 
            new Request.Callback(){         
                public void onCompleted(Response response) {
                    String arry = graphObject.getProperty("data").toString();
                    result = arry; // Assign response
                    latch.countDown(); // Mark completion
                }
            }

latch.await(); // Wait for Request to complete

System.out.println(result); // Use result

Reqeust繰り返しますが、これは非同期であるという目的を無効にし、パフォーマンスに影響を与える可能性があります。

于 2013-03-16T12:17:13.023 に答える