20 Stimmen

Android - Wechsel zwischen Landschafts- und Portraitmodus lässt Intent Werte verlieren

Ich verwende Intents, um zwischen Aktivitäten in meiner Android-App zu wechseln. Ich lege Daten im Intent ab, die in der nächsten Aktivität verwendet werden sollen. Wenn ich das Telefon zwischen Quer- und Hochformat wechsle, gehen die Werte, die vom Intent übergeben werden, verloren, und ich erhalte eine NullPointerException.

Kann mir bitte jemand sagen, was falsch sein könnte.

Es gibt viel Code, um ihn vollständig zu posten. Aber wenn jemand bestimmte Teile des Codes sehen muss, kann ich ihn hier posten.

Bearbeiten
Ich habe das Problem des nicht gespeicherten Zustands gelöst. Aber ein weiteres Problem, dem ich gegenüberstehe, ist, dass nachdem die Ausrichtung geändert wurde, keine der Tasten auf dem Bildschirm funktioniert. Beim Drücken einer Taste erhalte ich diese Warnung im LogCat

02-25 23:07:49.190: WARN/WindowManager(58): Kein Fenster, um Aktion 0 zu verteilen

Bitte helfen Sie.

0voto

Noyloy Punkte 134

Hallo, ich bin auch auf dieses Problem gestoßen. was es für mich behoben hat, war:

@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
    // Speichern Sie den aktuellen Spielstand des Benutzers
    savedInstanceState.putString("Username", mUsername);
    savedInstanceState.putString("Password", mPassword);
    savedInstanceState.putString("UserID", mUserID);

    // Rufen Sie immer die Superklasse auf, damit sie den Ansichts-Status speichern kann
    super.onSaveInstanceState(savedInstanceState);
}

und dann in onCreate():

if (savedInstanceState == null) {
    Bundle extras = getIntent().getExtras();
    if(extras == null) {
        mUsername = "?";
        mPassword = "?";
        mUserID = "?";
    } else {
        mUsername = extras.getString("Username");
        mPassword = extras.getString("Password");
        mUserID = extras.getString("UserID");
    }
} else {
    mUsername = (String) savedInstanceState.getSerializable("Username");
    mPassword = (String) savedInstanceState.getSerializable("Password");
    mUserID = (String) savedInstanceState.getSerializable("UserID");
}

dann können Sie sicher sein, dass die Objekte nicht null sind.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X