2013-03-16 3 views
0

마녀가 아래 코드와 같은 매개 변수로 호출됩니다. ... 코드에서 "완료"메서드 외의 매개 변수 "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

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()은 비동기식으로 인 을 호출합니다. 결과적으로 (final 로컬 변수를 사용하여) new Request()이 반환 된 직후에 arry에 액세스하려고하면 값은 여전히 ​​null입니다.

하지만 여기서도해야 할 일이 있다면 간단합니다.

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 목적을 격파하고 성능을 칠 수있는, 다시 투자 의견 유지.