Java 在活动上的finish()时使用ProgressDialog,NullPointerException
我有一个简单的后台任务要注册,为用户显示一个进度对话框。问题是我认为我得到了Java 在活动上的finish()时使用ProgressDialog,NullPointerException,java,android,Java,Android,我有一个简单的后台任务要注册,为用户显示一个进度对话框。问题是我认为我得到了NullPointerException是因为在intent中启动的第二个活动不知何故在对话框progresshide()之前被调用
NullPointerException
是因为在intent中启动的第二个活动不知何故在对话框progresshide()之前被调用方法,即使该方法在代码中列在第一位,因此不同的上下文和进度将返回null,从而导致错误
book.saveInBackground(new SaveCallback()
{
@Override
public void done(ParseException e) {
if (e == null)
{
dialogProgressHide();
Toast.makeText(getApplicationContext(), "Your book was posted correctly!", Toast.LENGTH_LONG).show();
finish();
}
else
{
Toast.makeText(getApplicationContext(), "An error has occured: " + e + "\n" + "Please try again!", Toast.LENGTH_LONG).show();
dialogProgressHide();
}
}
});
我可能错了,但这对我来说是有意义的,问题是我将如何解决这个问题?我只是希望对话框在完成活动之前消失,这样当进度不再在上下文中时,它就不会试图打开对话框
以下是对话框方法(如果需要):
private void dialogProgressShow() {
mDialog = new ProgressDialog(this);
mDialog.setMessage("One moment please while we post your book.");
mDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
mDialog.show();
}
private void dialogProgressHide() {
if (mDialog.isShowing())
{
mDialog.dismiss();
mDialog = null;
}
}
}
日志:
03-25 17:12:44.862: E/AndroidRuntime(16528): FATAL EXCEPTION: main
03-25 17:12:44.862: E/AndroidRuntime(16528): Process: com.jameswilson.booksale, PID: 16528
03-25 17:12:44.862: E/AndroidRuntime(16528): java.lang.NullPointerException
03-25 17:12:44.862: E/AndroidRuntime(16528): at com.jameswilson.booksale.PostBookActivity.dialogProgressHide(PostBookActivity.java:255)
03-25 17:12:44.862: E/AndroidRuntime(16528): at com.jameswilson.booksale.PostBookActivity.access$1(PostBookActivity.java:254)
03-25 17:12:44.862: E/AndroidRuntime(16528): at com.jameswilson.booksale.PostBookActivity$2$1.done(PostBookActivity.java:144)
03-25 17:12:44.862: E/AndroidRuntime(16528): at com.parse.SaveCallback.internalDone(SaveCallback.java:39)
03-25 17:12:44.862: E/AndroidRuntime(16528): at com.parse.SaveCallback.internalDone(SaveCallback.java:27)
03-25 17:12:44.862: E/AndroidRuntime(16528): at com.parse.Parse$6$1.run(Parse.java:846)
03-25 17:12:44.862: E/AndroidRuntime(16528): at android.os.Handler.handleCallback(Handler.java:733)
03-25 17:12:44.862: E/AndroidRuntime(16528): at android.os.Handler.dispatchMessage(Handler.java:95)
03-25 17:12:44.862: E/AndroidRuntime(16528): at android.os.Looper.loop(Looper.java:136)
03-25 17:12:44.862: E/AndroidRuntime(16528): at android.app.ActivityThread.main(ActivityThread.java:5017)
03-25 17:12:44.862: E/AndroidRuntime(16528): at java.lang.reflect.Method.invokeNative(Native Method)
03-25 17:12:44.862: E/AndroidRuntime(16528): at java.lang.reflect.Method.invoke(Method.java:515)
03-25 17:12:44.862: E/AndroidRuntime(16528): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
03-25 17:12:44.862: E/AndroidRuntime(16528): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
03-25 17:12:44.862: E/AndroidRuntime(16528): at dalvik.system.NativeStart.main(Native Method)
在尝试取消对话框引用之前,请检查它是否为空
private void dialogProgressHide() {
if (mDialog != null && mDialog.isShowing())
{
mDialog.dismiss();
mDialog = null;
}
}
调用mDialog.isShowing()
之前,请对ProgressDialog
的mDialog
实例进行空检查,代码似乎没有问题,请在dialogProgressHide中显示stacktrace和errorlog.so like(if mDialog.isShowing()| | mDialog!=null)在dialogProgressHide?发布日志希望有帮助。@user3460562:尝试使用if(null!=mdig)如果(mDialog.isShowing()){..your code…}
no,&&是惰性求值,那么如果mDialog!=null为false它将不计算第二个条件似乎工作正常,现在没有致命的异常。我会看看这是怎么回事!有人让我调用.isFinishing()或类似的东西,但我不知道如何实现它。