在我的一个视图中,用户进行选择。我想将该选择存储在我可以在所有视图中使用的变量中,以便它可以用于进一步的数据库查询,例如“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);
答案 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
了解详情