从方法中获取价值

时间:2013-03-16 11:40:42

标签: java methods

我有一个方法女巫被称为参数,如下面的代码...我需要在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();
                }
            }

2 个答案:

答案 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异步的目的并可能达到性能。