我有一个方法女巫被称为参数,如下面的代码...我需要在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();
}
}
答案 0 :(得分:4)
创建一个扩展(实现)Request.Callback并将其传递给方法的类 这个类可以存储String arry。
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.
答案 1 :(得分:1)
首先,我建议你在回调中做任何你需要的事情。 API似乎是出于某种原因而设计的。可能性能。显然onCompleted()
被异步调用 。因此,当您尝试在arry
返回后立即访问new 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
异步的目的并可能达到性能。