android如何建立全局变量,如何在Android中声明全局变量?
我正在創建一個需要登錄的應用程序。 我創建了主要和登錄活動。
在主要活動onCreate方法中我添加了以下條件:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
...
loadSettings();
if(strSessionString == null)
{
login();
}
...
}
登錄表單終止時執行的onActivityResult方法如下所示:
@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()方法被調用兩次),當手機鍵盤滑動時,再次出現登錄表單,我猜問題是變量strSessionString 。
有沒有人知道如何設置變量global以避免在用戶已經成功驗證后出現登錄表單?
#1樓
就像上面討論的那樣OS可以在沒有任何通知的情況下殺死APPLICATION(沒有onDestroy事件),所以沒有辦法保存這些全局變量。
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活動返回肯定結果,您的第二次登錄就會被阻止。 每次都會調用簡歷,因此不必擔心第一次沒有調用它。
總結
以上是生活随笔為你收集整理的android如何建立全局变量,如何在Android中声明全局变量?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php是走什么协议,TCP是什么协议
- 下一篇: android触摸效果,Android