0

我有一个方法被称为参数,如下面的代码......我需要在我的代码中使用 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 的类并将其传递给方法。
此类可以存储 String 数组。

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()调用。因此,当您尝试在返回后立即访问(使用局部变量)时,该值仍然为空。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 回答