package net.dev123.yibo.service.task; import java.util.List; import net.dev123.commons.Paging; import net.dev123.commons.util.ListUtil; import net.dev123.mblog.entity.DirectMessage; import net.dev123.yibo.db.LocalDirectMessage; import net.dev123.yibo.service.adapter.ConversationListAdapter; import net.dev123.yibo.service.cache.ConversationCache; import net.dev123.yibo.service.cache.wrap.DirectMessageWrap; import android.os.AsyncTask; public class ConversationReadLocalTask extends AsyncTask<DirectMessage, Void, Void> { private ConversationListAdapter adapter; private ConversationCache cache; private Paging<DirectMessage> paging; private LocalDirectMessage divider; List<DirectMessageWrap> listWrap = null; public ConversationReadLocalTask(ConversationListAdapter adapter, ConversationCache cache, LocalDirectMessage divider) { this.cache = cache; this.adapter = adapter; this.divider = divider; paging = adapter.getPaging(); } @Override protected void onPreExecute() { super.onPreExecute(); divider.setLoading(true); } @Override protected Void doInBackground(DirectMessage... params) { if (params == null || params.length != 2 || !paging.hasNext()) { return null; } DirectMessage max = params[0]; DirectMessage since = params[1]; paging.setGlobalMax(max); paging.setGlobalSince(since); if (paging.moveToNext()) { listWrap = cache.read(paging); } return null; } @Override protected void onPostExecute(Void result) { divider.setLoading(false); if (ListUtil.isNotEmpty(listWrap)) { cache.remove(cache.size() - 1); cache.addAll(cache.size(), listWrap); } if (ListUtil.isEmpty(listWrap) || listWrap.size() < paging.getPageSize() / 2) { paging.setLastPage(true); } adapter.notifyDataSetChanged(); } }