Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/178.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
Android 返回应用程序时,静态变量返回null_Android - Fatal编程技术网

Android 返回应用程序时,静态变量返回null

Android 返回应用程序时,静态变量返回null,android,Android,我有两个活动,第一个是LoginActivity,我有五个静态变量: public static Login loginTargetApp; public static Gateway gateway; public static Login loginGateway; public static OfflineUser offlineUser; public static boolean isLoggedIn; 在我的第二个活动MainViewActivity中,在android销毁并重新创

我有两个活动,第一个是LoginActivity,我有五个静态变量:

public static Login loginTargetApp;
public static Gateway gateway;
public static Login loginGateway;
public static OfflineUser offlineUser;
public static boolean isLoggedIn;
在我的第二个活动MainViewActivity中,在android销毁并重新创建我的活动后,当我尝试访问此变量时,它返回null,应用程序崩溃:

jsonTempDownload = new File(Constants.DEST_PATH_PARENT + File.separator
                    + LoginActivity.gateway.getUuidInstituicao() + Constants.JSON_TEMP_DOWNLOAD);
我试图通过以下方式保存变量状态:

@Override
protected void onSaveInstanceState(Bundle saveInstanceState) {

    saveInstanceState.putParcelable("loginTargetApp", LoginActivity.loginTargetApp);
    saveInstanceState.putParcelable("gateway", LoginActivity.gateway);
    saveInstanceState.putParcelable("loginGateway", LoginActivity.loginGateway);
    saveInstanceState.putParcelable("offlineUser", LoginActivity.offlineUser);

    saveInstanceState.putBoolean("isLoggedIn", LoginActivity.isLoggedIn);

    super.onSaveInstanceState(saveInstanceState);
}
为了恢复变量值,我尝试了两种不同的方法,但都不起作用:

@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {

    super.onRestoreInstanceState(savedInstanceState);

    LoginActivity.loginTargetApp = savedInstanceState.getParcelable("loginTargetApp");
    LoginActivity.gateway = savedInstanceState.getParcelable("gateway");
    LoginActivity.loginGateway = savedInstanceState.getParcelable("loginGateway");
    LoginActivity.offlineUser = savedInstanceState.getParcelable("offlineUser");

    LoginActivity.isLoggedIn = savedInstanceState.getBoolean("isLoggedIn");

}
以及:

在onCreate方法中,我的savedInstance不是null,但当我尝试在Log.d中显示值时,它仍然崩溃。

两点:

1-
static
不是
final
,因此可以为null,换句话说,请确保您正在将这些值设置为某个值

2-
super.onRestoreInstanceState(savedInstanceState)
而不是结束时


让我知道,干杯。

当活动被销毁并重新创建时,您的静态变量将被重新初始化,但我正在saveInstanceState中保存它的状态,并在onRestoreInstanceState中重新分配。我的回答有帮助吗?您是对的,我尝试获取从未实例化的值时出错了,谢谢兄弟
@Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        Log.d(Constants.MAIN_VIEW_ACTIVITY, "----------------");
        Log.d(Constants.MAIN_VIEW_ACTIVITY, "Abrindo MainViewActivity...");
        Log.d(Constants.MAIN_VIEW_ACTIVITY, "----------------");

        if (savedInstanceState != null) {

            // Restore value of members from saved state

            LoginActivity.isLoggedIn = savedInstanceState.getBoolean("isLoggedIn");
            boolean isLoggedIn = savedInstanceState.getBoolean("isLoggedIn");
            Log.d(Constants.MAIN_VIEW_ACTIVITY, "VARIÁVEL NORMAL: " + isLoggedIn);
            Log.d(Constants.MAIN_VIEW_ACTIVITY, "VARIÁVEL ESTÁTICA: " + LoginActivity.isLoggedIn);

            LoginActivity.loginTargetApp = savedInstanceState.getParcelable("loginTargetApp");
            Login loginTargetApp = savedInstanceState.getParcelable("loginTargetApp");
            Log.d(Constants.MAIN_VIEW_ACTIVITY, "VARIÁVEL NORMAL: " + loginTargetApp.getEmailAndress());
            Log.d(Constants.MAIN_VIEW_ACTIVITY, "VARIÁVEL ESTÁTICA: " + LoginActivity.loginTargetApp.getEmailAndress());

            LoginActivity.gateway = savedInstanceState.getParcelable("gateway");
            LoginActivity.loginGateway = savedInstanceState.getParcelable("loginGateway");

            LoginActivity.offlineUser = savedInstanceState.getParcelable("offlineUser");
            OfflineUser offlineUser = savedInstanceState.getParcelable("offlineUser");
            Log.d(Constants.MAIN_VIEW_ACTIVITY, "VARIÁVEL NORMAL: " + offlineUser.getEmail());
            Log.d(Constants.MAIN_VIEW_ACTIVITY, "VARIÁVEL ESTÁTICA: " + LoginActivity.offlineUser.getEmail());

        } else {

            Log.d(Constants.MAIN_VIEW_ACTIVITY, "SAVED INSTANCE STATE IS NULL");
        }