从 AsyncTask 调用 class 时替换 activity 参数
Substitute for activity argument when calling a class from AsyncTask
这是我的部分代码:
public class Login extends Activity {
private class LoginUser extends AsyncTask<String, String, Boolean> {
@Override
protected void onPostExecute(Boolean returnResult) {
DialogSelectAccount dsa=new DialogSelectAccount(getParent());
dsa.show();
}
}
}
public class DialogSelectAccount extends Dialog implements android.view.View.OnClickListener {
public DialogSelectAccount(Activity a) {
super(a);
}
}
但是当我运行该应用程序时,它在 public DialogSelectAccount();
下的 "super(a)" 处出现 NPE 错误
但是当我将代码更改为
public class Login extends Activity {
private class LoginUser extends AsyncTask<String, String, Boolean> {
@Override
protected void onPostExecute(Boolean returnResult) {
test();
}
}
public void test(){
DialogSelectAccount dsa=new DialogSelectAccount(this);
dsa.show();
}
}
有效。那么,如果我不想像上面那样创建一个单独的方法并直接在 onPostExecute 中调用 DialogSelectAccount,我应该将什么作为参数传递?
谢谢
对话框 class 需要上下文属性。
当你说 getParent() - 我想它没有 return 上下文。
您可以将上下文属性保存在全局 class 中并检索它 - 虽然我不建议这样做。
So what if I don't want to create a separate method like above and calls DialogSelectAccount directly inside the onPostExecute, what should I pass as the argument?
答案:
DialogSelectAccount dsa=new DialogSelectAccount(Login.this);
这是一个相当笼统的 java 问题,有关内部 类 的更多信息,请阅读此处:Getting hold of the outer class object from the inner class object
这是我的部分代码:
public class Login extends Activity {
private class LoginUser extends AsyncTask<String, String, Boolean> {
@Override
protected void onPostExecute(Boolean returnResult) {
DialogSelectAccount dsa=new DialogSelectAccount(getParent());
dsa.show();
}
}
}
public class DialogSelectAccount extends Dialog implements android.view.View.OnClickListener {
public DialogSelectAccount(Activity a) {
super(a);
}
}
但是当我运行该应用程序时,它在 public DialogSelectAccount();
下的 "super(a)" 处出现 NPE 错误但是当我将代码更改为
public class Login extends Activity {
private class LoginUser extends AsyncTask<String, String, Boolean> {
@Override
protected void onPostExecute(Boolean returnResult) {
test();
}
}
public void test(){
DialogSelectAccount dsa=new DialogSelectAccount(this);
dsa.show();
}
}
有效。那么,如果我不想像上面那样创建一个单独的方法并直接在 onPostExecute 中调用 DialogSelectAccount,我应该将什么作为参数传递?
谢谢
对话框 class 需要上下文属性。 当你说 getParent() - 我想它没有 return 上下文。
您可以将上下文属性保存在全局 class 中并检索它 - 虽然我不建议这样做。
So what if I don't want to create a separate method like above and calls DialogSelectAccount directly inside the onPostExecute, what should I pass as the argument?
答案:
DialogSelectAccount dsa=new DialogSelectAccount(Login.this);
这是一个相当笼统的 java 问题,有关内部 类 的更多信息,请阅读此处:Getting hold of the outer class object from the inner class object