【发布时间】:2013-11-12 22:00:14
【问题描述】:
您好,我正在制作访问 MySQL 数据库的登录页面。但是我的Activity 总是在完成AsyncTask 之前运行检查失败/成功的代码。
我尝试使用asynctask.get() 方法,但它只是冻结了我的用户界面并且不起作用。
我试过这个answer 说我应该在onPostExecute() 中调用结果检查器方法。
但由于我需要更改 TextView 以显示成功/失败,它会导致 NullPointerException,因为我在 onCreate() 中实例化了 TextView。
我无法将 TextView 实例化移动到构造函数中,因为它将返回 NullPointerException unable to instantiate activity ComponentInfo。
Login.java
public class Login extends Activity{
//declare global Views here
protected void onCreate(Bundle bundle){
//Setup views
}
protected void onClick(View v){
//Setup necessary variables
AsyncClass async = new AsyncClass(this);
async.execute(username, password);
}
public void checkSuccess(boolean success){
if(success)
textView1.setText("Success");
else
textView1.setText("Failed");
}
}
AsyncClass.java
public class AsyncClass extends AsyncTask<String, String, JSONObject>{
protected JSONObject doInBackground(String... params){
//access database
}
protected void onPostExecute(JSONObject json){
//read the json result
Login login = new Login();
login.checkSuccess(true);
}
}
有什么解决办法吗?谢谢
【问题讨论】:
-
您的代码最明显的问题是您直接调用
Activity的构造函数。你不应该自己实例化Activity,请查看Activity lifecycle -
@dave.c 感谢您的提示。