package net.dev123.yibo.service.task; import java.util.List; import net.dev123.commons.Paging; 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.Relation; import net.dev123.yibo.db.SocialGraphDao; import android.content.Context; import android.os.AsyncTask; import android.util.Log; public class SocialGraphCacheTask extends AsyncTask<Void, List<User>, Integer> { private static final String TAG = "SocialGraphCacheTask"; private MicroBlog microBlog; private SocialGraphDao dao; private User user; private Relation relation; private int cacheCount; private int cycleTime = 20; private int pageSize = 50; 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; } public SocialGraphCacheTask(Context context, LocalAccount account, Relation relation) { this.relation = relation; this.user = (User) account.getUser(); this.microBlog = GlobalVars.getMicroBlog(account); this.dao = new SocialGraphDao(context); } @Override protected Integer doInBackground(Void... params) { cacheCount = 0; if (microBlog == null) { return cacheCount; } List<User> listUser = null; Paging<User> paging = new Paging<User>(); paging.setPageSize(pageSize); while (paging.moveToNext() && cycleTime-- > 0) { try { if (relation == Relation.Followingship) { listUser = microBlog.getFriends(paging); } else { listUser = microBlog.getFollowers(paging); } } catch (LibException e) { if (Constants.DEBUG) Log.e(TAG, "Task", e); } if (listUser != null && listUser.size() > 0) { cacheCount += listUser.size(); this.publishProgress(listUser); } } return cacheCount; } @Override protected void onPostExecute(Integer result) { super.onPostExecute(result); int expectedCount = 0; if (relation == Relation.Followingship) { expectedCount = user.getFriendsCount(); } else { expectedCount = user.getFollowersCount(); } if (cacheCount == expectedCount) { System.out.println("SocialGraphCache is success!"); } } @Override protected void onProgressUpdate(List<User>... values) { super.onProgressUpdate(values); if (values == null || values.length != 1) { return; } List<User> listSavedUser = values[0]; if (relation == Relation.Followingship) { dao.saveFriends(user, listSavedUser); } else { dao.saveFollowers(user, listSavedUser); } } }