2014-09-19 4 views
0

этот вопрос больше дизайн. Я использую библиотеку Асинхронный-Http-клиент для Android http://loopj.com/android-async-http/ сделать запрос несколько вызовов из различных методов в классе мой код что-то вроде этогоНесколько шаблонов обратного вызова?

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 
       } 
      }); 

, если различные методы в моих классах, делающих подобные вызовы, как код, приведенный выше, но с различными параметрами запроса, как я могу инкапсулировать обратный вызов ResponseHandler, поэтому мне не нужно повторять его при каждом вызове метода. Интересно, есть ли какой-нибудь другой хороший шаблон, который я могу использовать здесь.

Примечание

я думал о подклассов его и, как другие предложили, но я не могу показаться, чтобы получить ответ объекта JSON таким образом. Thanks

ответ

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

Смежные вопросы