Twitter异步任务中的进度对话 - Android

时间:2014-09-24 12:44:43

标签: android twitter android-asynctask progressdialog android-context

我想在用户加载推文供稿时调出进度对话框,当加载推文供稿时,进度对话框消失。

这是TwitterAsyncTask类:

public class TwitterAsyncTask extends AsyncTask<Object, Void, ArrayList<TwitterTweet>> {
    ListActivity callerActivity;

    private ProgressDialog pd;

    final static String TWITTER_API_KEY = "ddd";
    final static String TWITTER_API_SECRET ="fffff";
    Context cnt;
    @Override
    protected void onPreExecute() {
      super.onPreExecute();
       pd = new ProgressDialog(cnt.getApplicationContext());
       pd.setMessage("loading");
       pd.show();
    }
    @Override
    protected ArrayList<TwitterTweet> doInBackground(Object... params) {
        ArrayList<TwitterTweet> twitterTweets = null;
        callerActivity = (ListActivity) params[1];


        if (params.length > 0) {
            TwitterAPI twitterAPI = new TwitterAPI(TWITTER_API_KEY,TWITTER_API_SECRET);
            twitterTweets = twitterAPI.getTwitterTweets(params[0].toString());
        }
        return twitterTweets;
    }

    @Override
    protected void onPostExecute(ArrayList<TwitterTweet> twitterTweets) {
        ArrayAdapter<TwitterTweet> adapter =
                new ArrayAdapter<TwitterTweet>(callerActivity, R.layout.twitter_tweets_list,
                        R.id.listTextView, twitterTweets);
        callerActivity.setListAdapter(adapter);
        ListView lv = callerActivity.getListView();

        lv.setDividerHeight(0);

        lv.setBackgroundColor(callerActivity.getResources().getColor(R.color.white));

        if (pd != null)
        {
           pd.dismiss();
        }
    }
}

这是调用TwitterAsyncTask类的类:

public class MainActivity extends ListActivity {

    final static String twitterScreenName = "CFABUK";
    final static String TAG = "MainActivity";
    private AsyncTask<Object, Void, ArrayList<TwitterTweet>> tat;
    boolean done;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        done = false;
        AndroidNetworkUtility androidNetworkUtility = new AndroidNetworkUtility();
        if (androidNetworkUtility.isConnected(this)) {
            new TwitterAsyncTask().execute(twitterScreenName, this);

        } else {
            Log.v(TAG, "Network not Available!");
        }

    }

    public void timerDelayRemoveDialog(long time, final ProgressDialog d) {
        new Handler().postDelayed(new Runnable() {
            public void run() {
                d.dismiss();
            }
        }, time);
    }
}

错误似乎出现在行pd = new ProgressDialog(cnt.getApplicationContext()); ...我应该为此做些什么?感谢

3 个答案:

答案 0 :(得分:0)

而不是cnt.getApplicationContext()将其替换为YourClassName.this

答案 1 :(得分:0)

只需在AsyncTask中添加构造函数,如

Context mContext;
public TwitterAsyncTask(Context mContext){

this.mContext=mContext;

}

从您的活动中

 Context mContext=this;

new TwitterAsyncTask(mContext).execute(twitterScreenName, this);

答案 2 :(得分:0)

在您的活动中嵌入Async任务,并用YourActivity.class替换您的Context cnt ...并且请包含一些日志。