2014-09-19 3 views
0

이 질문은 디자인과 관련이 있습니다. 내 코드는 다음과다중 콜백 디자인 패턴?

RestClient.post(context, "", entity, "application/json", new JsonHttpResponseHandler() { 
       @Override 
       public void onSuccess(int statusCode, Header[] headers, JSONObject response) { 

       } 

       @Override 
       public void onSuccess(int statusCode, Header[] headers, JSONArray timeline) { 
        // Map objects from json using gson 
       } 
      }); 

같은 것이 그래서 클래스에서 다른 방법에서 여러 통화 요청을 만들기 위해 안드로이드 비동기-의 HTTP 클라이언트 라이브러리 http://loopj.com/android-async-http/를 사용하고있는 경우 위의 코드와 같은 유사한 호출을 내 클래스에서 다른 방법하지만, 다른 요청 매개 변수와 함께, 어떻게 ResponseHandler 콜백을 캡슐화 할 수 있으므로 모든 메소드 호출에서 반복하지 않아도됩니다. 여기에 사용할 수있는 다른 멋진 디자인 패턴 방법이 있는지 궁금합니다.

내가 그것을 서브 클래스의 생각과 다른 사람이 제안으로,하지만 난이 JSON 개체 응답 그런 식으로 얻을 수없는 것. 감사합니다.

답변

0

이러한 모든 요청에서 콜백 동작이 동일합니까? 그렇다면, 당신은 JsonHttpResponseHandler의 단일 공유 인스턴스를 만들 수 중 하나 그 모든 곳에서 사용

private JsonHttpResponseHandler handler = new JsonHttpResponseHandler() { 
    @Override 
    public void onSuccess(...) { 
     ... 
    } 
} 

... 

RestClient.post(..., handler); 

을하거나 JsonHttpResponseHandler의 서브 클래스를 생성하고 사용할 수 있습니다 당신은 그나마

public class MyResponseHandler extends JsonHttpResponseHandler { 
    @Override 
    public void onSuccess(...) { 
     ... 
    } 
} 

... 

RestClient.post(..., new MyResponseHandler()); 
+0

그래, 할 수 있었지만 이것을 추가하는 것을 잊어 버렸습니다. 내 문제는 어떤 이유로 든, 나는 그런 식으로 반환 된 Json 응답을 얻을 수 없습니다. – irobotxxx

0

가를 만들어야합니다 모든 호출에 대한 새로운 핸들러.

JsonHttpResponseHandler myHandler = new JsonHttpResponseHandler() { 
      @Override 
      public void onSuccess(int statusCode, Header[] headers, JSONObject response) { 

      } 

      @Override 
      public void onSuccess(int statusCode, Header[] headers, JSONArray timeline) { 
       // Map objects from json using gson 
      } 
     }; 

RestClient.post(context, "", entity, "application/json", myHandler); 
+0

응답을 주셔서 감사합니다,하지만, 그것은 비동기이기 때문에, 어떻게하면 호출 할 수있는 경우 어떤 호출인지 알 수 있습니까? – irobotxxx