如何在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活动返回确定结果,您的第二次登陆就会被阻止。 每次都会调用简历,所以没必要担忧第一次没有调用它。

相关文章
相关标签/搜索