[英]context and this android
我对“上下文”和“这个”感到困惑,我不确定为什么下面的示例不起作用。
我尝试从我的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
有人可以向我解释一下,如果我想将子类放入新的类文件中,该如何解决?
这是因为尝试显示ProgressDialog时,尚未初始化SyncData
类的context
参数。 对象参数在调用SyncData
构造函数之前进行初始化。
在AsyncTask类中,您将progress
声明为全局变量,因为您将其置于方法块之外。 因此,该行:
ProgressDialog progress=ProgressDialog.show( context, "", "Please wait...", true);
在首次创建SyncData
对象时以及在调用构造函数之前执行。 由于尚未调用构造函数,因此context
为null
,当您尝试使用它时会导致错误。
使用LoginActivity.this
代替context
是LoginActivity
,因为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);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.