让我们说,我的应用程序有2个活动。
现在,如果选中此复选框,我将使用 SharedPreferences 保存值。
现在我想在每个其他活动中使用此设置值,因此我在活动1中创建 toast ,显示是否选中了checkBox。
活动1中的代码: -
if(new Activity2().getCheckStatus())
Toast.makeText(getApplicationContext(), "chcked", Toast.LENGTH_SHORT).show();
else
Toast.makeText(getApplicationContext(), "not chcked", Toast.LENGTH_SHORT).show();
活动2: -
public class Activity2 extends Activity implements OnClickListener
{
CheckBox check =null;
SharedPreferences settings;
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
getActionBar().setTitle("SETTING");
setContentView(R.layout.setting);
check =(CheckBox)findViewById(R.id.checkBox);
check.setOnClickListener(this);
settings = Activty2.this.getSharedPreferences("checkBox",0);
Boolean a = settings.getBoolean("isChecked", false);
check.setChecked(a);
}
/* (non-Javadoc)
* @see android.view.View.OnClickListener#onClick(android.view.View)
*/
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch(v.getId())
{
case R.id.checkBox:
SharedPreferences.Editor editor = settings.edit();
if(!check.isChecked())
{
check.setChecked(true);
editor.putBoolean("isChecked", true);
editor.commit();
}
else
{
check.setChecked(false);
editor.putBoolean("isChecked", false);
editor.commit();
}
break;
}
}
public boolean getCheckStatus()
{
SharedPreferences mysettings;
try{
mysettings = Activity2.this.getSharedPreferences("checkBox",0);
}catch(NullPointerException e)
{
return false;
}
return mysettings.getBoolean("isChecked", false);
}
}
Activity2 仅用于显示是否选中 checkBox ,如果是,则显示如此,如果有任何更改,则使用 SharedPreferences保存
我抓住 NullPointerException 的原因是,因为我在 activity1 中显示 toast ,这是我的主要活动,所以什么时候应用在第一次运行时,在运行onCreate()
activity2之前不会有SharedPref。因此,如果我收到异常,则表示该应用程序首次运行,或者用户尚未打开 Activity2 。如果是这样,则返回默认的 false 值,如果没有,则永远不会调用catch()
,我会得到存储的值。
MyProblem: - 正如你猜测的那样,它不起作用。 checkBox工作正常,每当我打开Activity2时它会显示我之前的设定值,但是toast总是显示 not checkd 。
请告诉我,这里的错误是什么,还是有任何其他更简单的方法来保存Android应用程序用户设置并在应用程序中的任何其他位置访问它们。
感谢。
答案 0 :(得分:2)
首先,将SharedPrefs读取移至activity1,如此
<击> if(new Activity2().getCheckStatus())
击>
将是致命的。
所以这个:
public boolean getCheckStatus()
{
SharedPreferences mysettings;
try{
mysettings = getSharedPreferences("checkBox",0);
}catch(NullPointerException e)
{
return false;
}
return mysettings.getBoolean("isChecked", false);
}
转到活动1. Albo,使"checkBox"
成为常量值(public static final String)。
立即尝试。
答案 1 :(得分:1)
您应该在其他活动中执行相同操作(打开共享首选项)并检查您的复选框是否已设置:
settings = Activity.this.getSharedPreferences("checkBox",0);
Boolean a = settings.getBoolean("isChecked", false);