我对'context'和'this'感到困惑,我不确定为什么下面的例子不起作用。
我尝试从LoginActivity中调用以下子类:
new SyncData(LoginActivity.this).execute(); // This will failed
public class SyncData extends AsyncTask <Void, Void, String> {
private Context context;
public SyncData(Context context){
this.context = context;
}
ProgressDialog progress=ProgressDialog.show( context, "", "Please wait...", true); //NOT WORK!!!
}
但如果我说改为这一行就行了:
ProgressDialog progress=ProgressDialog.show( LoginActivity.this, "", "Please wait...", true); // This will work
如果我想将子类放在新的类文件中,有人可以向我解释如何解决这个问题吗?
答案 0 :(得分:0)
这是因为当您尝试显示ProgressDialog时,context
类的SyncData
参数未初始化。在调用SyncData
构造函数之前初始化对象参数。
答案 1 :(得分:0)
在AsyncTask类中,将progress
进度声明为全局变量,因为已将其放在方法块之外。因此,行:
ProgressDialog progress=ProgressDialog.show( context, "", "Please wait...", true);
首次创建SyncData
的对象时,在调用构造函数之前执行。由于您的构造函数尚未调用,context
为null
,因此在您尝试使用它时会导致错误。
使用LoginActivity.this
代替context
有效,因为SyncData
是LoginActivity
的内部类,因此您可以从内部类中访问其范围。
如果要使用context
,请尝试将progress
声明的赋值部分移动到构造函数之后的方法中,例如onPreExecute()
。类似的东西:
public class SyncData extends AsyncTask <Void, Void, String> {
private Context context;
ProgressDialog progress;
public SyncData(Context context){
this.context = context;
}
protected void onPreExecute() {
progress=ProgressDialog.show( context, "", "Please wait...", true);
}
}