使用SharedPreferences保存应用程序的设置

时间:2014-12-19 13:48:17

标签: android sharedpreferences

让我们说,我的应用程序有2个活动。

  1. 活动1 ,带有按钮的主要活动,打开活动2
  2. 活动2 ,这是我的设置活动,并且有复选框
  3. 现在,如果选中此复选框,我将使用 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应用程序用户设置并在应用程序中的任何其他位置访问它们。

    感谢。

2 个答案:

答案 0 :(得分:2)

首先,将SharedPrefs读取移至activity1,如此

<击> if(new Activity2().getCheckStatus())

如果活动2更大,

将是致命的。

所以这个:

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);