我有一个int“flag”变量,它有两个可能的int值,0& 1。
此应用程序的主题是:询问用户是或否?
如果用户选择YES,则指定int = 1。 否则如果选择否,则指定int = 0;
我使用以下方式实现这一目标:
public static int flag;
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.flag0:
flag=0;
System.err.println("Flag : " + flag);
break;
case R.id.flag1:
flag=1;
System.err.println("Flag : " + flag);
break;
default:
break;
}
}
我的问题在这里:它没问题&将首选项保存到我的应用程序正在运行前景或后台。
如果我们关闭/终止应用程序,则会清除所有存储的首选项,即设置为默认值Zero。
当我刚刚开始研究STORAGE Options时,我只是尝试实现共享偏好,它仍然具有相同的上述问题。我用于使用共享首选项存储int值的方法是;
编辑:我只是尝试了以下答案,但徒劳无功这是我发布的总代码,对您有帮助(可能)
xml文件:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<TextView
android:id="@+id/text"
android:textSize="30sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world" />
<Button android:id="@+id/flag0"
android:layout_marginTop="10dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/text"
android:text="set to 0"/>
<Button android:id="@+id/flag1"
android:layout_marginTop="10dp"
android:layout_below="@+id/text"
android:layout_toRightOf="@+id/flag0"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="set to 1"/>
<Button android:id="@+id/test0"
android:layout_marginTop="10dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/flag1"
android:text="Test for 0"/>
MainActivity:
public class MainActivity extends Activity implements OnClickListener {
TextView textView;
Button bt1,bt2,testbt1;
public static int flag;
SharedPreferences pref;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = (TextView) findViewById(R.id.text);
bt1 = (Button) findViewById(R.id.flag0);
bt2 = (Button) findViewById(R.id.flag1);
testbt1 = (Button) findViewById(R.id.test0);
bt1.setOnClickListener(this);
bt2.setOnClickListener(this);
testbt1.setOnClickListener(this);
pref=getSharedPreferences("Sai", MODE_PRIVATE);
pref.getInt("lang_us", 0);
System.err.println("Flag Value in Main method : " + flag);
}
public void saveFlag(){
pref=getSharedPreferences("Sai",MODE_PRIVATE);
Editor editor = pref.edit();
editor.putInt("lang_us", flag);
editor.commit();
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.flag0:
flag=0;
saveFlag();
System.err.println("Flag : " + flag);
break;
case R.id.flag1:
flag=1;
saveFlag();
System.err.println("Flag : " + flag);
break;
case R.id.test0:
System.err.println("Flag : " + flag);
if (flag == 0) {
textView.setText("flag is zero");
} else {
textView.setText("flag is not zero");
}
break;
default:
break;
}
}
}
哪里出错?
答案 0 :(得分:4)
你的做法是错误的
1&GT;使用Mode_PRIVATE(当您希望共享首选项文件只能由您的应用访问时使用)而不是MODE_WORLD_WRITABLE(当您希望共享首选项文件只能在应用程序外部访问时使用)
2&GT;创建一个方法来保存标志状态
public void saveFlag(){
pref=getSharedPreferences("Sai",Context.MODE_PRIVATE);
Editor editor = pref.edit();
editor.putInt("lang_us", flag);
editor.commit();
}
3&GT;每当更改标志
时调用此方法 @Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.flag0:
flag=0;
saveFlag();
System.err.println("Flag : " + flag);
break;
case R.id.flag1:
flag=1;
saveFlag();
System.err.println("Flag : " + flag);
break;
default:
break;
}
4.&GT;然后在你的onCreate()方法中,你应该检索这个值。
pref=getSharedPreferences("Sai",Context.MODE_PRIVATE);
flag = prefs.getInt("lang_us", 0);
答案 1 :(得分:2)
将此代码放在onClick方法中:
pref=getSharedPreferences("Sai",Context.MODE_PRIVATE);
Editor editor = pref.edit();
editor.putInt("lang_us", flag);
editor.commit();
然后在您的onCreate()
方法中,您应该检索此值。
pref=getSharedPreferences("Sai",Context.MODE_PRIVATE);
flag =prefs.getInt("lang_us", 0);
flag
现在应该具有您保存的值。
答案 2 :(得分:1)
试试这个:
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
SharedPreferences.Editor sharedEditor = preferences.edit();
sharedEditor.putInt("lang_us", flag);
sharedEditor.commit();
它对我有用。
并且不要忘记使用sharedEditor.getInt(..);
答案 3 :(得分:0)
为什么不使用布尔SharedPreferences
我觉得这样做最好。
这是一个例子
SharedPreferences prefs = PreferenceManager
.getDefaultSharedPreferences(this);
if (!prefs.getBoolean("firstTime", false)) {
SharedPreferences.Editor editor = prefs.edit();
editor.putBoolean("firstTime", true);
editor.commit();
}