繁体   English   中英

上下文和这个机器人

[英]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对象时以及在调用构造函数之前执行。 由于尚未调用构造函数,因此contextnull ,当您尝试使用它时会导致错误。

使用LoginActivity.this代替contextLoginActivity ,因为SyncDataLoginActivity的内部类,因此您可以从内部类内部访问其范围。

如果要使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM