如何在Android中聲明全局變量?

我正在建立一個須要登陸的應用程序。 我建立了主要和登陸活動。 android

在主要活動onCreate方法中我添加了如下條件: 數組

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

    ...

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

登陸表單終止時執行的onActivityResult方法以下所示: app

@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);
            }
        }
    }

問題是登陸表單有時會出現兩次( login()方法被調用兩次),當手機鍵盤滑動時,再次出現登陸表單,我猜問題是變量strSessionStringide

有沒有人知道如何設置變量global以免在用戶已經成功驗證後出現登陸表單? spa


#1樓

就像上面討論的那樣OS能夠在沒有任何通知的狀況下殺死APPLICATION(沒有onDestroy事件),因此沒有辦法保存這些全局變量。 code

SharedPreferences多是一個解決方案,除了你有COMPLEX STRUCTURED變量(在個人例子中,我有整數數組來存儲用戶已經處理過的ID)。 SharedPreferences的問題在於,每次須要值時都很難存儲和檢索這些結構。 視頻

在個人狀況下,我有一個後臺服務,因此我能夠將這些變量移動到那裏,由於服務有onDestroy事件,我能夠輕鬆保存這些值。 進程


#2樓

您可使用Intents,Sqlite或共享首選項。 對於媒體存儲,如文檔,照片和視頻,您能夠改成建立新文件。 事件


#3樓

我找不到如何指定應用程序標籤,但通過大量的谷歌搜索後,從清單文件docs中能夠看出:除了應用程序節中的默認圖標和標籤外,還使用了android:name。 文檔

android:name爲應用程序實現的Application子類的徹底限定名稱。 啓動應用程序進程時,將在任何應用程序的組件以前實例化此類。

子類是可選的; 大多數應用程序不須要一個。 在沒有子類的狀況下,Android使用基本Application類的實例。


#4樓

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();
    ...
    }
}

#5樓

在恢復以前調用活動結果。 所以,將登陸檢查移至恢復狀態,一旦secomd活動返回確定結果,您的第二次登陸就會被阻止。 每次都會調用簡歷,所以沒必要擔憂第一次沒有調用它。

相關文章
相關標籤/搜索