最初のアクティビティは 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 に値を表示しようとすると、まだクラッシュします。