package net.dev123.yibo.service.task; import net.dev123.commons.ServiceProvider; import net.dev123.exception.ExceptionCode; import net.dev123.exception.LibException; import net.dev123.mblog.MicroBlog; import net.dev123.mblog.entity.ResponseCount; import net.dev123.yibo.MicroBlogActivity; import net.dev123.yibo.R; import net.dev123.yibo.YiBoApplication; import net.dev123.yibo.common.CompatibilityUtil; import net.dev123.yibo.common.Constants; import net.dev123.yibo.common.GlobalResource; import net.dev123.yibo.common.GlobalVars; import net.dev123.yibo.common.NetType; import net.dev123.yibo.common.ResourceBook; import android.app.Activity; import android.content.Context; import android.os.AsyncTask; import android.util.Log; import android.widget.TextView; public class QueryResponseCountTask extends AsyncTask<Void, Void, ResponseCount> { private static final String LOG_TAG = "QueryStatusCount"; private Context context; private MicroBlog microBlog = null; private String resultMsg = null; //更新列表的转发和评论 net.dev123.mblog.entity.Status status; TextView tvResponse; public QueryResponseCountTask(Context context, net.dev123.mblog.entity.Status status) { this.context = context; this.status = status; YiBoApplication yibo = (YiBoApplication)((Activity)context).getApplication(); microBlog = GlobalVars.getMicroBlog(yibo.getCurrentAccount()); } public QueryResponseCountTask(Context context, net.dev123.mblog.entity.Status status, TextView tvResponse) { this.context = context; this.status = status; this.tvResponse = tvResponse; YiBoApplication yibo = (YiBoApplication)((Activity)context).getApplication(); microBlog = GlobalVars.getMicroBlog(yibo.getCurrentAccount()); } @Override protected void onPreExecute() { super.onPreExecute(); if (GlobalVars.NET_TYPE == NetType.NONE) { resultMsg = ResourceBook.getStatusCodeValue(ExceptionCode.NET_UNCONNECTED, context); cancel(true); onPostExecute(null); } if (context instanceof MicroBlogActivity) { int retweetCount = (status.getRetweetCount() == null ? 0 : status.getRetweetCount()); int commentCount = (status.getCommentCount() == null ? 0 : status.getCommentCount()); fillClickableResponseCount(retweetCount, commentCount); } else { if (CompatibilityUtil.isSdk1_5()) { if (Constants.DEBUG) Log.v(LOG_TAG, "sdk1.5"); cancel(true); } } } @Override protected ResponseCount doInBackground(Void... params) { if (microBlog == null || status == null) { return null; } if (status.getServiceProvider() == ServiceProvider.Twitter) { //Twitter不支持Count接口 return null; } ResponseCount count = null; try { count = microBlog.getResponseCount(status); } catch (LibException e) { if (Constants.DEBUG) Log.e(LOG_TAG, resultMsg, e); if (e.getExceptionCode() != ExceptionCode.UNSUPPORTED_API) { resultMsg = ResourceBook.getStatusCodeValue(e.getExceptionCode(), context); } } return count; } @Override protected void onPostExecute(ResponseCount result) { super.onPreExecute(); if (result != null) { status.setRetweetCount(result.getRetweetCount()); status.setCommentCount(result.getCommentsCount()); String responseFormat = GlobalResource.getStatusResponseFormat(context); if (context instanceof MicroBlogActivity) { fillClickableResponseCount(result.getRetweetCount(), result.getCommentsCount()); } else if (tvResponse != null) { String responseText = String.format( responseFormat, result.getRetweetCount(), result.getCommentsCount()); tvResponse.setText(responseText); } } else { if (tvResponse == null && resultMsg != null) { //Toast.makeText(context, resultMsg, Toast.LENGTH_SHORT).show(); } } } private void fillClickableResponseCount(int retweetCount, int commentCount) { TextView tvRetweetCount = (TextView)((Activity)context).findViewById(R.id.tvRetweetCount); TextView tvCommentCount = (TextView)((Activity)context).findViewById(R.id.tvCommentCount); String retweetCountText = context.getString( R.string.label_blog_retweet_count, retweetCount); String commentCountText = context.getString( R.string.label_blog_comment_count, commentCount); tvRetweetCount.setText(retweetCountText); tvCommentCount.setText(commentCountText); } }