2013-03-16 129 views
0

我有一个方法女巫被称为参数像下面的代码...我需要使用参数“arry”之外的Oncomplete方法,在我的代码..是否有一种方法,我可以实现那个?从方法获得价值

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

回答

4

创建一个扩展(实现)Request.Callback并将其传递给该方法的类。
该类可以存储字符串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

首先,我建议你做任何你需要回调里面。 API似乎是由于某种原因而设计的。可能的表现。显然onCompleted()异步调用。因此,当您尝试在new Request()返回(使用final局部变量)后立即访问arry时,该值仍然为空。

但是,如果您仍然需要这样做,那么这是一个简单的方法。

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目的,并可能击中性能。