如何设置全局变量以在Android中的视图之间共享?

时间:2013-11-27 05:26:34

标签: android global-variables

在我的一个视图中,用户进行选择。我想将该选择存储在我可以在所有视图中使用的变量中,以便它可以用于进一步的数据库查询,例如“bookId”。

如何让“bookId”成为在一个视图上设置的全局变量,并且可以在需要时通过其他视图进行访问?

-----编辑:基于评论和答案,我正在尝试做什么-----

在我存储SharedPreference的主要活动中,我在onCreate之前有这个:

public static final String PREFS_NAME = "myPrefs";
SharedPreferences settings;
Integer bookId;

在我的onCreate中我做到了:

settings = getSharedPreferences(PREFS_NAME, 0);
bookId = settings.getInt("bookId", 0);

按下按钮后,我正在存储自定义属性并尝试在SharedPreference中设置bookId:

SharedPreferences.Editor editor = settings.edit();
editor.putInt("bookId",bookKey);
editor.commit();

在另一个视图中,我试图从SharedPreference获取bookId,并且出于测试目的,我正在尝试将存储的值设置为textView,以确保它存储并正确传输。

在第二个视图的onCreate之前:

public static final String PREFS_NAME = "myPrefs";
SharedPreferences settings;

在onCreate中:

settings = getSharedPreferences(PREFS_NAME, 0);
Integer bookId = settings.getInt("bookId", (Integer) null);
tempBookTextView = (TextView) findViewById(R.id.tempBookTextView);
tempBookTextView.setText(bookId);

我有两个问题,到目前为止看起来如何?我使用

时应用程序崩溃的任何想法
Integer bookId = settings.getInt("bookId", (Integer) null);

3 个答案:

答案 0 :(得分:0)

要扼杀封装的精神,

public class Globals {
    public static int x;
    public static int y;
}

以后

if (Globals.x == 0) { ... }

但请不要这样做,任何类都可以包含静态变量,找到一个类负责来存储你想要存储的值。

OTOH,当您不期望它时,可以重新启动android进程,在这种情况下,所有变量都将被重置。因此,最好使用共享首选项,如果它们不能按预期工作(我在至少一个Android版本中看到过),请将共享首选项的实例存储在静态变量中。

答案 1 :(得分:0)

不要使用全局变量来通过应用程序访问变量值,而是尝试使用SharedPreferences

样本活动:

public class Book extends Activity {
    public static final String PREFS_NAME = "MyPrefsFile";
     String mBookId = null;
    @Override
    protected void onCreate(Bundle state){
       super.onCreate(state);
       . . .

       // Restore preferences
       SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
       mBookId = settings.getString("book_id", null);
       // use book_id;
    }

    @Override
    protected void onStop(){
       super.onStop();

      // We need an Editor object to make preference changes.
      // All objects are from android.context.Context
      SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
      SharedPreferences.Editor editor = settings.edit();
      editor.putString("book_id", mBookId);

      // Commit the edits!
      editor.commit();
    }
}

首选项通常是私有的,可以通过所有应用程序组件进行访问。与其他应用程序共享数据与世界可读或可写的首选项文件很少使用,因为外部组件需要知道文件的确切文件名和位置。

答案 2 :(得分:0)

您可以使用Shared Preferences

马上保存!

SharedPreferences.Editor editor =  PreferenceManager.getDefaultSharedPreferences(ProjectAct.this).edit();
editor.putInteger(StaticVariable.BOOKID, "1");
p.get("contract_no"));
editor.commit();

然后从那个地方打电话

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
int book_id = prefs.getInteger(StaticVariable.BOOKID,null);

How to use SharedPreferences in Android to store, fetch and edit values

了解详情