package net.dev123.yibo.service.task; import java.util.List; import net.dev123.commons.Paging; import net.dev123.commons.util.ListUtil; import net.dev123.entity.BaseUser; import net.dev123.exception.LibException; import net.dev123.mblog.MicroBlog; import net.dev123.mblog.entity.User; import net.dev123.yibo.common.Constants; import net.dev123.yibo.common.GlobalVars; import net.dev123.yibo.db.LocalAccount; import net.dev123.yibo.db.UserGroupDao; import net.dev123.yibome.entity.LocalGroup; import android.content.Context; import android.os.AsyncTask; import android.util.Log; public class GroupMemberCacheTask extends AsyncTask<Void, List<? extends BaseUser>, Integer> { private static final String TAG = "GroupMemberCacheTask"; private MicroBlog microBlog; private LocalAccount account; private LocalGroup group; private UserGroupDao dao; private int cacheCount; private int cycleTime = 20; private int pageSize = 100; public GroupMemberCacheTask(Context context, LocalAccount account, LocalGroup group) { this.account = account; this.group = group; this.microBlog = GlobalVars.getMicroBlog(account); this.dao = new UserGroupDao(context); } @Override protected Integer doInBackground(Void... params) { cacheCount = 0; if (microBlog == null) { return cacheCount; } List<? extends BaseUser> userList = null; Paging<User> paging = new Paging<User>(); paging.setPageSize(pageSize); while (paging.moveToNext() && cycleTime-- > 0) { try { userList = microBlog.getGroupMembers(group.getSpGroupId(), paging); } catch (LibException e) { if (Constants.DEBUG) Log.e(TAG, "Task", e); } if (ListUtil.isNotEmpty(userList)) { cacheCount += userList.size(); this.publishProgress(userList); } } return cacheCount; } @Override protected void onProgressUpdate(List<? extends BaseUser>... values) { super.onProgressUpdate(values); if (values == null || values.length != 1) { return; } List<? extends BaseUser> userList = values[0]; if (ListUtil.isNotEmpty(userList)) { dao.batchSave(account, group, userList); } } @Override protected void onPostExecute(Integer result) { super.onPostExecute(result); if (cacheCount == group.getMemberCount()) { System.out.println("GroupMemberCache is success!"); } } public int getPageSize() { return pageSize; } public void setPageSize(int pageSize) { this.pageSize = pageSize; } public int getCycleTime() { return cycleTime; } public void setCycleTime(int cycleTime) { this.cycleTime = cycleTime; } }