package net.dev123.yibo.service.task; import java.util.ArrayList; import java.util.List; import net.dev123.commons.Paging; import net.dev123.commons.util.ListUtil; import net.dev123.exception.LibException; import net.dev123.mblog.MicroBlog; import net.dev123.mblog.entity.DirectMessage; import net.dev123.yibo.common.GlobalVars; import net.dev123.yibo.db.LocalAccount; import net.dev123.yibo.db.LocalDirectMessage; import net.dev123.yibo.service.adapter.DirectMessageUtil; import net.dev123.yibo.service.adapter.DirectMessagesListAdapter; import net.dev123.yibo.service.cache.DirectMessageCache; import net.dev123.yibo.service.cache.wrap.DirectMessageWrap; import android.os.AsyncTask; public class DirectMessageReadLocalTask extends AsyncTask<DirectMessage, Void, Void> { private DirectMessagesListAdapter adapter; private DirectMessageCache cache; private Paging<DirectMessage> paging; private LocalDirectMessage divider; List<DirectMessageWrap> listWrap = null; List<DirectMessage> listMessage = null; public DirectMessageReadLocalTask(DirectMessagesListAdapter adapter, DirectMessageCache 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 inboxMax = params[0]; DirectMessage outboxMax = params[1]; if (paging.moveToNext()) { listWrap = cache.read(paging); } if (ListUtil.isEmpty(listWrap)) { listMessage = getDataFromRemote(inboxMax, outboxMax); } return null; } @Override protected void onPostExecute(Void result) { divider.setLoading(false); if (ListUtil.isEmpty(listWrap) && ListUtil.isEmpty(listMessage)) { paging.setLastPage(true); adapter.notifyDataSetChanged(); return; } if (ListUtil.isNotEmpty(listWrap)) { cache.remove(cache.size() - 1); cache.addAll(cache.size(), listWrap); adapter.notifyDataSetChanged(); } else if (ListUtil.isNotEmpty(listMessage)) { adapter.addCacheToDivider(divider, listMessage); } } private List<DirectMessage> getDataFromRemote(DirectMessage inboxMax, DirectMessage outboxMax) { LocalAccount account = adapter.getAccount(); MicroBlog microBlog = GlobalVars.getMicroBlog(account); List<DirectMessage> messageList = new ArrayList<DirectMessage>(); if (microBlog == null) { return messageList; } try { Paging<DirectMessage> paging = new Paging<DirectMessage>(); paging.setGlobalMax(inboxMax); paging.moveToNext(); List<DirectMessage> tempList = microBlog.getInboxDirectMessages(paging); if (ListUtil.isNotEmpty(tempList)) { messageList.addAll(tempList); } paging = new Paging<DirectMessage>(); paging.moveToNext(); paging.setGlobalMax(outboxMax); tempList = microBlog.getOutboxDirectMessages(paging); if (ListUtil.isNotEmpty(tempList)) { messageList.addAll(tempList); } } catch (LibException e) { //resultMsg = e.getDescription(); paging.moveToPrevious(); } if (ListUtil.isNotEmpty(messageList)) { LocalDirectMessage localMessage = DirectMessageUtil.createDividerDirectMessage(messageList, account); messageList.add(localMessage); } return messageList; } }