608 Stimmen

Wie deklariert man globale Variablen in Android?

Ich erstelle eine Anwendung, die eine Anmeldung erfordert. Ich habe die Haupt- und die Anmeldeaktivität erstellt.

In der Haupttätigkeit onCreate Methode habe ich die folgende Bedingung hinzugefügt:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    ...

    loadSettings();
    if(strSessionString == null)
    {
        login();
    }
    ...
}

El onActivityResult Methode, die beim Beenden des Anmeldeformulars ausgeführt wird, sieht wie folgt aus

@Override
public void onActivityResult(int requestCode,
                             int resultCode,
                             Intent data)
{
    super.onActivityResult(requestCode, resultCode, data);
    switch(requestCode)
    {
        case(SHOW_SUBACTICITY_LOGIN):
        {
            if(resultCode == Activity.RESULT_OK)
            {

                strSessionString = data.getStringExtra(Login.SESSIONSTRING);
                connectionAvailable = true;
                strUsername = data.getStringExtra(Login.USERNAME);
            }
        }
    }

Das Problem ist, dass das Anmeldeformular manchmal zweimal erscheint (die login() Methode wird zweimal aufgerufen) und auch wenn die Telefontastatur gleitet, erscheint das Anmeldeformular wieder und ich vermute, das Problem ist die Variable strSessionString .

Weiß jemand, wie man die Variable global setzt, um zu vermeiden, dass das Anmeldeformular erscheint, nachdem sich der Benutzer bereits erfolgreich authentifiziert hat?

12voto

Mike Brown Punkte 121

Ich konnte auch nicht herausfinden, wie man das Anwendungs-Tag angibt, aber nach einigem Googeln wurde es aus den Manifestdateidokumenten ersichtlich: Verwenden Sie Android:name, zusätzlich zum Standardsymbol und der Bezeichnung in der Anwendungsstanze.

Android:Name Der vollständig qualifizierte Name einer Anwendungsunterklasse, die für die Anwendung implementiert wurde. Wenn der Anwendungsprozess gestartet wird, wird diese Klasse vor allen anderen Komponenten der Anwendung instanziiert.

Die Unterklasse ist optional; die meisten Anwendungen werden keine benötigen. Wenn keine Unterklasse vorhanden ist, verwendet Android eine Instanz der Basisklasse Application.

5voto

Anand Punkte 1285

Sie müssen nur einen Anwendungsnamen wie unten definieren, der dann funktioniert:

<application
  android:name="ApplicationName" android:icon="@drawable/icon">
</application>

4voto

user716653 Punkte 41

Wenn einige Variablen in Sqlite gespeichert sind und Sie sie in den meisten Aktivitäten in Ihrer Anwendung verwenden müssen. dann ist die Anwendung vielleicht der beste Weg, dies zu erreichen. Fragen Sie die Variablen beim Start der Anwendung aus der Datenbank ab und speichern Sie sie in einem Feld. Dann können Sie diese Variablen in Ihren Aktivitäten verwenden.

Finden Sie also den richtigen Weg, und es gibt keinen besten Weg.

4voto

Adorjan Princz Punkte 11524

Wie oben beschrieben, könnte das Betriebssystem die APPLIKATION ohne Benachrichtigung beenden (es gibt kein onDestroy-Ereignis), so dass es keine Möglichkeit gibt, diese globalen Variablen zu speichern.

SharedPreferences könnte eine Lösung sein, AUSSER man hat KOMPLEX STRUKTURIERTE Variablen (in meinem Fall hatte ich ein Integer-Array, um die IDs zu speichern, die der Benutzer bereits bearbeitet hat). Das Problem mit den SharedPreferences ist, dass es schwierig ist, diese Strukturen zu speichern und abzurufen, jedes Mal die Werte benötigt.

In meinem Fall hatte ich einen Hintergrund-SERVICE, so dass ich diese Variablen dorthin verschieben konnte, und da der Dienst ein onDestroy-Ereignis hat, konnte ich diese Werte leicht speichern.

3voto

yanchenko Punkte 55207

Sie können ein statisches Feld haben, um diese Art von Zustand zu speichern. Oder Sie können ihn in der Ressource Bundle speichern und von dort aus bei onCreate(Bundle savedInstanceState) wiederherstellen. Vergewissern Sie sich nur, dass Sie den Lebenszyklus der Android-App vollständig verstehen (z. B. warum login() bei einer Änderung der Tastaturausrichtung aufgerufen wird).

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