【问题标题】:Progress Dialog in Twitter Async Task - AndroidTwitter 异步任务中的进度对话框 - Android
【发布时间】:2014-09-24 12:44:42
【问题描述】:

我想在用户加载推特提要时调出进度对话框,当推特提要加载时进度对话框消失。

这是 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());...我应该为此添加什么?谢谢

【问题讨论】:

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


    【解决方案1】:

    只需在您的 AsyncTask 中添加 Constructor 即可

    Context mContext;
    public TwitterAsyncTask(Context mContext){
    
    this.mContext=mContext;
    
    }
    

    从你的活动中

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

    【讨论】:

    • 试试这个..但是先定义上下文
    【解决方案2】:

    用 YourClassName.this 代替 cnt.getApplicationContext()

    【讨论】:

    • 问题是..我不能因为我的班级调用 TwitterAsyncTask 班级并且不能被引用
    • 我需要看日志,或者出现什么错误。除此之外尝试 getActivity()
    【解决方案3】:

    将您的异步任务嵌入您的活动中,并将您的 Context cnt 替换为 YourActivity.class...并请包含一些日志。

    【讨论】:

      猜你喜欢
      • 2017-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-17
      相关资源
      最近更新 更多