Диалог прогресса в 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