2011-08-30 59 views
2

我想在saveState()调用中做一些清理。如果在退出活动时出现错误 ,我想弹出一个对话框,但此时活动已经消失。我的上下文是什么?

我想从一个名为StudentEdit的活动中发生这种情况,但上下文应该是什么? 当我使用StudentEdit.this时,对话框弹出并消失。 getApplicationContext导致 空指针异常。

private void saveState() { 

    // some error checking code 
    // if blah blah 
    AlertDialog alertDialog = new AlertDialog.Builder(StudentEdit.this).create(); 

alertDialog.setMessage("error"); 

alertDialog.setButton(BUTTON_POSITIVE, "Yes", new DialogInterface.OnClickListener() { 
    public void onClick(DialogInterface dialog, int which) { 

       // do something for yes 

       } }); 
alertDialog.setButton(BUTTON_NEGATIVE, "No", new DialogInterface.OnClickListener() { 
    public void onClick(DialogInterface dialog, int id) { 
      dialog.cancel();   // kill dialog 
      StudentEdit.this.finish(); // kill the activity 
    } 
}); 
alertDialog.show(); 

} 
+0

澄清,我的saveState被称为onPause和onSaveInstanceState – Martin

回答

0

这应该适合你。

@Override 
protected void onPause() { 
    saveState(this) 
} 

将您的saveState更改为。

private saveState(Context context) { 
    //AlertDialog alertDialog = new AlertDialog.Builder(context).create(); 
    Toast.maketext(context, "Boom..." Toast.LENGTH_SHORT).show(); 
} 

这应该够了,onSaveInstanceState调用可能不需要。

UPDATE

我还是会建议考虑您的设计,如果你真的需要显示在这一点上的东西。可能是Toast会这样做,不建议在此时用警报阻止UI。

+0

优秀!谢谢! – Martin

0

我不认为你可以在设计中显示UI。如果您有错误,您应该坚持这些数据,并在下次启动时将其显示给用户。

一般来说,您不能使用ApplicationContext用于UI相关的东西。

+0

是。需要重新设计。不好的软件男孩。没有饼干。 :o – Martin

+0

它发生。经常。 –

相关问题