Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/223.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我的应用程序在暂停一段时间后以及onRestoreInstanceState之后崩溃_Java_Android_Android Fragments_Onrestoreinstancestate - Fatal编程技术网

Java 我的应用程序在暂停一段时间后以及onRestoreInstanceState之后崩溃

Java 我的应用程序在暂停一段时间后以及onRestoreInstanceState之后崩溃,java,android,android-fragments,onrestoreinstancestate,Java,Android,Android Fragments,Onrestoreinstancestate,好了,伙计们,我真的需要一些帮助,我有一个发布的应用程序自动检查,在我的Droid4上,在现实世界中,按下手机上的物理主页按钮暂停应用程序一段时间,当调用onRestoreInstanceState后,应用程序崩溃。我能找到的最多的是我要返回的片段,它有一个按钮“添加新车辆”,当单击该按钮时,它会更新下一个片段,一旦该按钮被单击,它就会崩溃。我认为这是因为第三个片段的片段状态丢失了。在暂停一段时间之前,该应用程序始终工作正常。这是我的堆栈跟踪: java.lang.NullPointer

好了,伙计们,我真的需要一些帮助,我有一个发布的应用程序自动检查,在我的Droid4上,在现实世界中,按下手机上的物理主页按钮暂停应用程序一段时间,当调用onRestoreInstanceState后,应用程序崩溃。我能找到的最多的是我要返回的片段,它有一个按钮“添加新车辆”,当单击该按钮时,它会更新下一个片段,一旦该按钮被单击,它就会崩溃。我认为这是因为第三个片段的片段状态丢失了。在暂停一段时间之前,该应用程序始终工作正常。这是我的堆栈跟踪:

    java.lang.NullPointerException
at pete01507.AutoInspection.af.a(Unknown Source)
at pete01507.AutoInspection.MainActivity.a(Unknown Source)
at pete01507.AutoInspection.ae.onClick(Unknown Source)
at android.view.View.performClick(View.java:4106)
at android.view.View$PerformClick.run(View.java:17052)
at android.os.Handler.handleCallback(Handler.java:615)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5059)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:792)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:555)
at dalvik.system.NativeStart.main(Native Method)
任何帮助都将不胜感激。谢谢

以下是onRestoreInstanceState:

    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
    super.onRestoreInstanceState(savedInstanceState);
    Log.d(TAG, "onRestoreInstanceState");
    if (savedInstanceState == null) {
        Log.d(TAG, "Restore onSaveInstanceState was empty");
        car="";
        fresh=false;
    }else{
        Log.d(TAG, "Restore onSaveInstanceState else was not empty");
        car = (String) savedInstanceState.get("car");
        load();
        mViewPager.setCurrentItem(savedInstanceState.getInt("vp"));
    }
    }
    @Override
    public void onSaveInstanceState(Bundle savedInstanceState) {
    super.onSaveInstanceState(savedInstanceState);
    Log.d(TAG, "onSaveInstanceState");
    if (car.equals("")){
        Log.d(TAG, "onSaveInstanceState car not loaded");
    } else {
        Log.d(TAG, "onSaveInstanceState car is loaded");
        savedInstanceState.putString("car", car);
        savedInstanceState.putInt("vp", mViewPager.getCurrentItem());
    }
    }
以下是onSaveInstanceState:

    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
    super.onRestoreInstanceState(savedInstanceState);
    Log.d(TAG, "onRestoreInstanceState");
    if (savedInstanceState == null) {
        Log.d(TAG, "Restore onSaveInstanceState was empty");
        car="";
        fresh=false;
    }else{
        Log.d(TAG, "Restore onSaveInstanceState else was not empty");
        car = (String) savedInstanceState.get("car");
        load();
        mViewPager.setCurrentItem(savedInstanceState.getInt("vp"));
    }
    }
    @Override
    public void onSaveInstanceState(Bundle savedInstanceState) {
    super.onSaveInstanceState(savedInstanceState);
    Log.d(TAG, "onSaveInstanceState");
    if (car.equals("")){
        Log.d(TAG, "onSaveInstanceState car not loaded");
    } else {
        Log.d(TAG, "onSaveInstanceState car is loaded");
        savedInstanceState.putString("car", car);
        savedInstanceState.putInt("vp", mViewPager.getCurrentItem());
    }
    }

更新:我有一个主活动,在一个ViewPager上有七个静态片段。该活动没有任何视图或页面,因此当应用程序启动时,第一个页面就是第一个片段。当单击“+New Vehicle”按钮时,我删除了对回调接口的所有调用,以更新第三个片段。该按钮位于第二个片段中。现在,该应用程序可以正常运行,不会崩溃,但fragment#3没有更新。回调接口仍然会更新第一个片段,但不会更新第三个片段,原因是我还没有弄清楚,应用程序被内存不足的Android杀死后,你再次点击应用程序使用第三个片段,其余片段将无法通过接口访问。那么,我该如何恢复这些片段呢?比如,当你第一次安装应用程序时,应用程序启动,或者这个应用程序有一个调用context.finish的退出按钮,在按下退出按钮后,界面会再次工作?

太糟糕了,我无法评论,因为我不确定这一点,但是!我记得我也有类似的问题,这听起来很熟悉。所以我打开了我制作的一个应用程序的2到3年的源代码。我写了一篇评论

若应用程序通过home(主页)按钮进入后台,安卓系统将 内存不足时,它会关闭应用程序,但会保存活动堆栈和实例 状态为捆绑。当应用程序再次打开时,它将不会启动 启动器活动,但活动堆栈上的最后一个,以及 从其他活动传递给它的值将丢失

那么,您不希望在某个活动中的onCreate或调用getIntent()的其他地方的某些值不为null吗


对此我不确定,但我知道这有多令人沮丧,所以我希望您能幸运地找到bug。

您能分享相关的源代码(onRestoreInstanceState)吗?我们需要更多的背景来了解发生了什么。你模糊的stacktrace没有告诉我们任何事情。当然。单击按钮时也会涉及回调接口。此外,如果我注释掉对回调接口的调用,它不会崩溃,但在未调用时片段不会得到更新。我的崩溃与对回调接口的调用直接相关。同样,这只会在暂停一段时间后发生。您可以在SaveInstanceState上共享您的
?很难用模糊的堆栈跟踪来精确定位。你能在没有proguard的情况下在构建中运行这个程序来获得一个有行号的堆栈跟踪,这样你就可以精确定位导致错误的确切行吗?是的,这可能是正在发生的事情,但我只有一个活动。是否有方法重新启动Main活动?这就是我必须要做的,我尝试了几种方法来重新启动MainActivity,但都失败了。谢谢你的回答!我已经有一段时间没有使用android了,但我想我已经解决了这个问题,我使用了一个静态的最终字符串,它的值是从preferences文件加载的。我正在检查该字符串是否有值。如果没有,我启动主活动并杀死加载的活动。我在检查savedInstanceState是否为空之前做了此检查。。。成功了。您也可以这样做,因为启动相同的活动不应该是问题,只需确保您杀死了旧的活动,因此单击“上一步”按钮不是问题