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.ExceptionCode; import net.dev123.exception.LibException; import net.dev123.mblog.MicroBlog; import net.dev123.mblog.entity.Group; import net.dev123.yibo.R; import net.dev123.yibo.common.Constants; import net.dev123.yibo.common.GlobalVars; import net.dev123.yibo.common.NetType; import net.dev123.yibo.common.ResourceBook; import net.dev123.yibo.db.LocalAccount; import net.dev123.yibo.db.LocalStatus; import net.dev123.yibo.service.adapter.GroupStatusesListAdapter; import net.dev123.yibo.service.adapter.StatusUtil; import android.os.AsyncTask; import android.util.Log; import android.widget.Toast; public class GroupStatusesPageDownTask extends AsyncTask<net.dev123.mblog.entity.Status, Void, Boolean> { private static final String TAG = "GroupStatusesTask"; private LocalAccount account; private MicroBlog microBlog; private GroupStatusesListAdapter adapter; private Group group; private LocalStatus divider; private List<net.dev123.mblog.entity.Status> statusList; private boolean isEmptyAdapter = false; private String resultMsg = null; public GroupStatusesPageDownTask(GroupStatusesListAdapter adapter, LocalStatus divider) { this.adapter = adapter; this.group = adapter.getGroup(); this.divider = divider; this.account = adapter.getAccount(); microBlog = GlobalVars.getMicroBlog(account); } @Override protected void onPreExecute() { super.onPreExecute(); if (divider != null) { divider.setLoading(true); } isEmptyAdapter = (adapter.getCount() == 0); if (GlobalVars.NET_TYPE == NetType.NONE) { cancel(true); resultMsg = ResourceBook.getStatusCodeValue( ExceptionCode.NET_UNCONNECTED, adapter.getContext()); Toast.makeText(adapter.getContext(), resultMsg, Toast.LENGTH_LONG).show(); if (divider != null) { divider.setLoading(false); } adapter.notifyDataSetChanged(); } } @Override protected Boolean doInBackground(net.dev123.mblog.entity.Status... params) { boolean isSuccess = false; if (microBlog == null || params == null || params.length != 2) { return isSuccess; } net.dev123.mblog.entity.Status max = params[0]; net.dev123.mblog.entity.Status since = params[1]; Paging<net.dev123.mblog.entity.Status> paging = new Paging<net.dev123.mblog.entity.Status>();; paging.setGlobalMax(max); paging.setGlobalSince(since); if (paging.moveToNext()) { try { statusList = microBlog.getGroupStatuses(group.getId(), paging); } catch (LibException e) { if (Constants.DEBUG) Log.e(TAG, "Task", e); resultMsg = ResourceBook.getStatusCodeValue( e.getExceptionCode(), adapter.getContext()); paging.moveToPrevious(); } } // Util.getResponseCounts(statusList, microBlog); isSuccess = ListUtil.isNotEmpty(statusList); if (isSuccess && (paging.hasNext() || (paging.isLastPage() && since == null))) { LocalStatus localStatus = StatusUtil.createDividerStatus(statusList, account); if (paging.isLastPage() && since == null) { localStatus.setLocalDivider(true); adapter.getPaging().setLastPage(true); } statusList.add(localStatus); } return isSuccess; } @Override protected void onPostExecute(Boolean result) { super.onPostExecute(result); if (divider != null) { divider.setLoading(false); } if (result) { if (divider == null) { adapter.addCacheToLast(statusList); } else { adapter.addCacheToDivider(divider, statusList); } } else { if (resultMsg != null) { Toast.makeText(adapter.getContext(), resultMsg, Toast.LENGTH_LONG).show(); } else { Toast.makeText(adapter.getContext(), R.string.msg_no_divider_data, Toast.LENGTH_LONG).show(); adapter.remove(divider); } if (isEmptyAdapter) { setEmptyView(); } // 如果没有的话,修改状态 adapter.notifyDataSetChanged(); } } private void setEmptyView() { LocalAccount account = adapter.getAccount(); if (account == null) { return; } LocalStatus divider = new LocalStatus(); divider.setDivider(true); divider.setLocalDivider(true); List<net.dev123.mblog.entity.Status> statusList = new ArrayList<net.dev123.mblog.entity.Status>(); statusList.add(divider); adapter.addCacheToLast(statusList); } }