对话框错误
问题描述:
当我试图表明一个的AsyncTask我碰到下面的错误工作对话框: java.lang.reflect.InvocationTargetException 显示java.lang.NullPointerException对话框错误
活动和的AsyncTask的代码是:
public class MainActivity extends Activity {
private ControlLogin ctlLogin;
private ProgressDialog dialog;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.login);
ctlLogin = (ControlLogin)findViewById(R.id.controlLogin);
ctlLogin.setOnLoginListener(new OnLoginListener()
{
@Override
public void onLogin(String email, String password, Boolean saveAccount){
ProgressDialog dialog = new ProgressDialog(getApplicationContext());
dialog.setMessage("Signing...");
dialog.setIndeterminate(true);
dialog.setCancelable(false);
new Login().execute(email, password);
}
});
}
public class Login extends AsyncTask<String, Float, CloudApp> {
protected void onPreExecute(){
dialog.show();
}
@Override
protected CloudApp doInBackground(String... arg0) {
CloudApp api = new CloudAppImpl(arg0[0], arg0[1]);
return api;
}
protected void onPostExecute(CloudApp api){
dialog.dismiss();
try {
CloudAppAccount acc = api.getAccountDetails();
Toast toast = Toast.makeText(getBaseContext(), "test: " + acc.getEmail(), Toast.LENGTH_LONG);
toast.show();
} catch (CloudAppException e) {
e.printStackTrace();
}
}
}
}
任何帮助?谢谢!!
答
通过在您的onLogin(...)
方法中定义一个局部变量dialog
,您可以隐藏您的成员dialog
。因此,dialog
永远不会被初始化为任何内容,这就是为什么您的Login
类中有NPE。
@Override
public void onLogin(String email, String password, Boolean saveAccount){
//remove the leading ProgessDialog here...it is hiding your member 'dialog'
//dialog = new ProgressDialog(getApplicationContext());
ProgressDialog dialog = new ProgressDialog(getApplicationContext());
dialog.setMessage("Signing...");
dialog.setIndeterminate(true);
dialog.setCancelable(false);
new Login().execute(email, password);
}
答
你确定你的对话框存在,当你解雇它吗?我想在onLogin中重新创建一个新的对话框变量,其名称与您的活动字段变量相同。
protected void onPostExecute(CloudApp api) {
dialog.dismiss(); // this one is not initialized
try {
CloudAppAccount acc = api.getAccountDetails();
你可能会起到安全:
if (dialog != null) dialog.dismiss();
你应该张贴的NullPointerException异常堆栈跟踪。 – howettl
我如何获得堆栈跟踪? – mg3dem
从DDMS获取错误日志 - > Logcat窗口 – user370305