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?

0voto

gorefest Punkte 809

Der Ansatz der Unterklassifizierung wurde auch im BARACUS-Rahmen verwendet. Aus meiner Sicht Unterklassenbildung Die Anwendung sollte mit den Lebenszyklen von Android arbeiten; das ist es, was jede Anwendung Container tut. Anstatt Globals zu haben, registriere ich Beans in diesem Kontext und lasse sie in jede vom Kontext verwaltbare Klasse injizieren. Jede injizierte Bean-Instanz ist eigentlich ein Singleton.

Siehe dieses Beispiel für Details

Warum manuelle Arbeit leisten, wenn man so viel mehr haben kann?

0voto

Amit Tiwari Punkte 3616

Sie könnten eine Klasse erstellen, die die Application Klasse und deklarieren Sie dann Ihre Variable als ein Feld dieser Klasse und stellen Sie eine Getter-Methode dafür bereit.

public class MyApplication extends Application {
    private String str = "My String";

    synchronized public String getMyString {
        return str;
    }
}

Um dann auf diese Variable in Ihrer Activity zuzugreifen, verwenden Sie dies:

MyApplication application = (MyApplication) getApplication();
String myVar = application.getMyString();

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