0

最初のアクティビティは LoginActivity で、次の 5 つの静的変数があります。

public static Login loginTargetApp;
public static Gateway gateway;
public static Login loginGateway;
public static OfflineUser offlineUser;
public static boolean isLoggedIn;

私の 2 番目のアクティビティである 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);
}

変数値を回復するために、2 つの異なる方法を試しましたが、うまくいきませんでした。

@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");

}

と:

@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");
        }

onCreate メソッドでは、savedInstance は null ではありませんが、Log.d に値を表示しようとすると、まだクラッシュします。

4

1 に答える 1

1

ポイントのカップル:

1-staticではないfinalため、null になる可能性があります。つまり、これらの値を何かに設定していることを確認してください。

2-は、最後でsuper.onRestoreInstanceState(savedInstanceState);はなく最初に呼び出す必要がありprotected void onRestoreInstanceState(Bundle savedInstanceState)ます。

ソース(ページの最後を見てください)

教えてください、乾杯。

于 2013-06-20T14:57:42.490 に答える