我在android中运行Async(doInBackground)任务。
我需要填充任务的进度条。所以我在onPreExecute中显示了progressDialog,
ProgressDialog.show的签名是Show(Context,Title,message)
但这里的上下文是什么?
@Override
protected void onPreExecute()
{
progress = ProgressDialog.show(???, "Loading", "Please Wait");
}
答案 0 :(得分:2)
为AsyncTask创建一个构造函数,它将上下文作为参数。
public class async extends AsyncTask<String, Integer, String>{
private Context context;
public async(Context context) {
this.context = context;
}
@Override
protected void onPreExecute() {
// Manipulate progress bar
}
然后用它来执行它
async mTask = new async(context).execute(params);
答案 1 :(得分:1)
Context只能是Activity,Service或Brodcast,而不是像Asyncktask这样的任何其他类。所以将Activity的Context放在你使用AsyncTask类的地方。
答案 2 :(得分:1)
您可以在AsyncTask构造函数中传递活动上下文以创建ProgressDialog:
MyAsyncTask构造函数:
public MyAsyncTask(Context context){
progressDialog = new ProgressDialog(context, "Loading", "Please wait...");
}
onPreExecute方法:
@Override
protected void onPreExecute()
{
progressDialog.show();
}
或存储上下文并在onPreExecute方法中创建对话框(但我更喜欢使用第一种方式):
public class MyAsyncTask extends AsyncTask{
private Context mContext;
public MyAsyncTask(Context context){
this.mContext = context;
}
@Override
protected void onPreExecute()
{
progress = ProgressDialog.show(this.mContext, "Loading", "Please Wait");
}
}
在声明MyAsyncTask的活动中,您传递活动:
MyAsyncTask asyncTask = new AsyncTask(this);
asynchTask.execute();
答案 3 :(得分:1)
Add this function in your class
private Context getDialogContext() {
Context context;
if (getParent() != null)
context = getParent();
else
context = this;
return context;
}
In your asynctask use it as follows
@Override
protected void onPreExecute()
{
progress = ProgressDialog.show(getDialogContext(), "Loading", "Please Wait");
}
答案 4 :(得分:0)
如果您只想使用this
作为上下文,那么您的Asynctask应该被编写为扩展Activity类的类的内部类。然后,您的上下文是扩展Activity的类的名称。更好的做法是传递这样的上下文:
ClassExtendingActivity.this
答案 5 :(得分:-1)
您可以传递当前活动视图参考,例如MainActivity.this