Диалог прогресса в Twitter Async Task - Android

Я хочу вызвать диалоговое окно прогресса, когда пользователь загружает ленту Twitter, и когда лента Twitter загружена, диалоговое окно прогресса исчезает.

Это класс 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 ответа

Решение

Просто добавьте Constructor в свой AsyncTask как

Context mContext;
public TwitterAsyncTask(Context mContext){

this.mContext=mContext;

}

И от твоей активности

 Context mContext=this;

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

Внедрите свою асинхронную задачу в вашу деятельность и замените свой Context cnt на YourActivity.class... И, пожалуйста, включите в него некоторые записи.

Вместо cnt.getApplicationContext() замените его на YourClassName.this

Другие вопросы по тегам