2013-03-16 235 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目的,並可能擊中性能。