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?

2voto

kumar kundan Punkte 1958

DO N'T Verwenden Sie eine andere <application> Tag in der Manifestdatei und nehmen Sie nur eine Änderung in der bestehenden Datei vor. <application> Tag, fügen Sie diese Zeile hinzu android:name=".ApplicationName" wo, ApplicationName ist der Name Ihrer Unterklasse (zum Speichern von Global), die Sie gerade erstellen.

so, schließlich Ihr EIN UND EINZIG <application> Tag in der Manifestdatei sollte wie folgt aussehen :-

<application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/Theme.AppCompat.NoActionBar"
        android:name=".ApplicationName"
        >

1voto

Raju yourPepe Punkte 2819

Können Sie Intents , Sqlite , oder Shared Preferences verwenden. Wenn es um die Speicherung von Medien geht, wie Dokumente, Fotos und Videos, können Sie stattdessen neue Dateien erstellen.

1voto

Krishna Punkte 2145

Sie können dies auf zwei Arten tun:

  1. Verwendung der Anwendungsklasse

  2. Gemeinsame Präferenzen verwenden

  3. Verwendung der Anwendungsklasse

Exemple :

class SessionManager extends Application{

  String sessionKey;

  setSessionKey(String key){
    this.sessionKey=key;
  }

  String getSessisonKey(){
    return this.sessionKey;
  }
}

Sie können die obige Klasse verwenden, um die Anmeldung in Ihrer MainActivity wie unten beschrieben zu implementieren. Der Code wird in etwa so aussehen:

@override 
public void onCreate (Bundle savedInstanceState){
  // you will this key when first time login is successful.
  SessionManager session= (SessionManager)getApplicationContext();
  String key=getSessisonKey.getKey();
  //Use this key to identify whether session is alive or not.
}

Diese Methode ist für die vorübergehende Speicherung geeignet. Sie haben wirklich keine Ahnung, wann das Betriebssystem die Anwendung wegen Speichermangels beenden wird. Wenn Ihre Anwendung im Hintergrund läuft und der Benutzer durch eine andere Anwendung navigiert, die mehr Speicher benötigt, wird Ihre Anwendung beendet, da das Betriebssystem den Vordergrundprozessen mehr Priorität einräumt als dem Hintergrund. Daher wird Ihre Anwendung Objekt Null sein, bevor Benutzer abmeldet. Daher empfehle ich Ihnen, die zweite, oben angegebene Methode zu verwenden.

  1. Gemeinsame Einstellungen verwenden.

    String MYPREF="com.your.application.session"
    
    SharedPreferences pref= context.getSharedPreferences(MyPREF,MODE_PRIVATE);
    
    //Insert key as below:
    
    Editot editor= pref.edit();
    
    editor.putString("key","value");
    
    editor.commit();
    
    //Get key as below.
    
    SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
    
    String key= getResources().getString("key");

0voto

Vaishali Sutariya Punkte 5073
class GlobaleVariableDemo extends Application {

    private String myGlobalState;

    public String getGlobalState(){
     return myGlobalState;
    }
    public void setGlobalState(String s){
     myGlobalState = s;
    }
}

class Demo extends Activity {

@Override
public void onCreate(Bundle b){
    ...
    GlobaleVariableDemo appState = ((GlobaleVariableDemo)getApplicationContext());
    String state = appState.getGlobalState();
    ...
    }
}

0voto

user3044482 Punkte 416

Bei Aktivität wird das Ergebnis vor der Wiederaufnahme aufgerufen. Verschieben Sie also die Login-Prüfung auf on resume und Ihr zweiter Login kann blockiert werden, sobald die secomd-Aktivität ein positives Ergebnis geliefert hat. On resume wird jedes Mal aufgerufen, so dass man sich keine Sorgen machen muss, dass es beim ersten Mal nicht 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