package com.lgq.rssreader.parser; import java.util.List; import android.os.Handler; import android.os.HandlerThread; import android.os.Looper; import android.os.Message; import com.lgq.rssreader.entity.Blog; import com.lgq.rssreader.entity.Channel; import com.lgq.rssreader.entity.SyncState; import com.lgq.rssreader.enums.RssAction; public class HttpResponseHandler{ protected static final int SUCCESS_MESSAGE = 0; protected static final int SUCCESS_MESSAGE_MORE = 1; protected static final int SUCCESS_FOUR_MESSAGE = 2; protected static final int SUCCESS_FOUR_MESSAGE_MORE = 3; protected static final int FAILURE_MESSAGE = 5; private Handler handler; private HandlerThread thread = new HandlerThread("自定义消息队列"); /** * Creates a new AsyncHttpResponseHandler */ public HttpResponseHandler() { thread.start(); // Set up a handler to post events back to the correct thread if possible //if(thread. != null) { handler = new Handler(thread.getLooper()){ @Override public void handleMessage(final Message msg){ HttpResponseHandler.this.handleMessage(msg); // new Thread(){ // public void run(){ // //HttpResponseHandler.this.handleMessage(msg); // } // }.start(); } }; //} } // // Callbacks to be overridden, typically anonymously // public <T> void onCallback(List<T> data, boolean result, String msg){} public <T> void onCallback(List<T> data, boolean result, String msg, boolean hasmore){} public <T> void onCallback(T data, boolean result, String msg){} public <T, K> void onCallback(List<T> tdata, List<K> kdata, boolean result, String msg){} public <T, K> void onCallback(List<T> tdata, List<K> kdata, boolean result, String msg, boolean hasmore){} // // Pre-processing of messages (executes in background threadpool thread) // protected <T> void sendSuccessMessage(List<T> data, boolean result, String msg) { sendMessage(obtainMessage(SUCCESS_MESSAGE, new Object[]{data, result, msg})); } protected <T> void sendSuccessMessage(List<T> data, boolean result, String msg, boolean hasmore) { sendMessage(obtainMessage(SUCCESS_MESSAGE_MORE, new Object[]{data, result, msg, hasmore})); } protected <T, K> void sendSuccessMessage(List<T> tData, List<K> kData, boolean result, String msg) { sendMessage(obtainMessage(SUCCESS_FOUR_MESSAGE, new Object[]{tData, kData, result, msg})); } protected <T, K> void sendSuccessMessage(List<T> tData, List<K> kData, boolean result, String msg, boolean hasmore) { sendMessage(obtainMessage(SUCCESS_FOUR_MESSAGE_MORE, new Object[]{tData, kData, result, msg, hasmore})); } protected <T> void sendSuccessMessage(T data, boolean result, String msg) { sendMessage(obtainMessage(SUCCESS_MESSAGE, new Object[]{data, result, msg})); } // // Pre-processing of messages (in original calling thread, typically the UI thread) // // Methods which emulate android's Handler and Message methods protected <T,K> void handleMessage(Message msg) { Object[] response; switch(msg.what) { case SUCCESS_MESSAGE: response = (Object[])msg.obj; if(response[0] instanceof List) onCallback((List<T>)response[0], Boolean.parseBoolean(response[1].toString()), (String)response[2]); else onCallback((T)response[0], Boolean.parseBoolean(response[1].toString()), (String)response[2]); break; case SUCCESS_MESSAGE_MORE: response = (Object[])msg.obj; onCallback((List<T>)response[0], Boolean.parseBoolean(response[1].toString()), (String)response[2], Boolean.parseBoolean(response[3].toString())); break; case SUCCESS_FOUR_MESSAGE: response = (Object[])msg.obj; onCallback((List<T>)response[0],(List<K>)response[1], Boolean.parseBoolean(response[2].toString()), (String)response[3]); break; case SUCCESS_FOUR_MESSAGE_MORE: response = (Object[])msg.obj; onCallback((List<T>)response[0],(List<K>)response[1], Boolean.parseBoolean(response[2].toString()), (String)response[3], Boolean.parseBoolean(response[4].toString())); break; } } protected void sendMessage(Message msg) { if(handler != null){ handler.sendMessage(msg); } else { handleMessage(msg); } } protected Message obtainMessage(int responseMessage, Object response) { Message msg = null; if(handler != null){ msg = this.handler.obtainMessage(responseMessage, response); }else{ msg = Message.obtain(); msg.what = responseMessage; msg.obj = response; } return msg; } // Interface to AsyncHttpRequest <T> void sendResponseMessage(List<T> data, boolean result, String msg) { sendSuccessMessage(data, result, msg); } <T,K> void sendResponseMessage(List<T> tdata, List<K> kdata, boolean result, String msg) { sendSuccessMessage(tdata, kdata, result, msg); } <T,K> void sendResponseMessage(List<T> tdata, List<K> kdata, boolean result, String msg, boolean hasMore) { sendSuccessMessage(tdata, kdata, result, msg, hasMore); } <T> void sendResponseMessage(List<T> data, boolean result, String msg, boolean hasMore) { sendSuccessMessage(data, result, msg, hasMore); } <T> void sendResponseMessage(T data, boolean result, String msg) { sendSuccessMessage(data, result, msg); } }