对话框错误

问题描述:

当我试图表明一个的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(); 
      } 
     } 

    } 

} 

任何帮助?谢谢!!

+0

你应该张贴的NullPointerException异常堆栈跟踪。 – howettl

+0

我如何获得堆栈跟踪? – mg3dem

+0

从DDMS获取错误日志 - > Logcat窗口 – user370305

通过在您的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); 
    } 
+0

我已删除线,它再次失败 – mg3dem

+0

不要删除线,删除线的第一个字...我已编辑我的帖子... –

+0

好了,现在的错误是: android.view。 WindowManager $ BadTokenException:无法添加窗口 - 标记null不适用于应用程序 – mg3dem

你确定你的对话框存在,当你解雇它吗?我想在onLogin中重新创建一个新的对话框变量,其名称与您的活动字段变量相同。

protected void onPostExecute(CloudApp api) { 

      dialog.dismiss(); // this one is not initialized 
      try { 
       CloudAppAccount acc = api.getAccountDetails(); 

你可能会起到安全:

if (dialog != null) dialog.dismiss();