在android应用程序中记住我

在android应用程序中记住我,android,checkbox,Android,Checkbox,我在我的应用程序中有一个复选框,我想知道是否有可能让应用程序记住复选框的最后状态。我的意思是,当复选框被选中并且应用程序被关闭时,当应用程序再次打开时,复选框仍然被选中,与未选中的复选框相同 我就是这样做的 我的简历上有这个代码 @Override protected void onResume() { super.onResume(); if(checkbox.equals(true)){ checkbox.setChecke

我在我的应用程序中有一个复选框,我想知道是否有可能让应用程序记住复选框的最后状态。我的意思是,当复选框被选中并且应用程序被关闭时,当应用程序再次打开时,复选框仍然被选中,与未选中的复选框相同

我就是这样做的

我的简历上有这个代码

@Override
     protected void onResume() {
      super.onResume();
     if(checkbox.equals(true)){
                  checkbox.setChecked(true);

              }else{
                  checkbox.setChecked(false); 
              }

     }
这是我的onchecklistener

checkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

            @Override
            public void onCheckedChanged(CompoundButton buttonView,
                    boolean isChecked) {
                // TODO Auto-generated method stub
                if(checkbox.isChecked()){
                      checkbox.setChecked(true);
                      publicvar.displayMessage(Login.this, "check", 0);

                  }else{
                      checkbox.setChecked(false); 
                      publicvar.displayMessage(Login.this, "uncheck", 0);
                  }
            }

        });

不幸的是,它没有工作

您应该保持复选框状态。例如,您可以使用。

您应该保持复选框状态。例如,您可以使用。

您需要将检查状态存储在某种持久存储中。最简单的方法是使用。您需要将该值存储在侦听器中,并在恢复时读取它。您需要将检查状态存储在某种持久性存储中。最简单的方法是使用。你应该把这个值存储在你的听者中,然后在简历中阅读它。我同意特德·霍普的观点

试试这个:

public void saveCheckBoxState(boolean isChecked){
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
    SharedPreferences.Editor editor = prefs.edit();

    editor.putBoolean("key",isChecked);
    editor.commit();
}
onCheckedChanged()中调用
saveCheckBoxState(布尔)

在活动的
onResume()
中调用
getCheckBoxState()

我同意特德·霍普的观点

     CheckBox stayInCheckBox = (CheckBox) findViewById(R.id.check_remember);
 SharedPreferences sharedpreferences = PreferenceManager  .getDefaultSharedPreferences(getApplicationContext());


// put this code in oncreate method 
public void stayIn()
{
    sharedpreferences = getSharedPreferences("myrem", MODE_PRIVATE);
    String s3 = sharedpreferences.getString("check", "false");

    String name = sharedpreferences.getString("name", null);


    if (s3.equals("true")) {
        stayInCheckBox.setChecked(true);
        editUser.setText(name);
        editPassword.setText(pass);
    } else {
        stayInCheckBox.setChecked(false);
    }
}

// put this code when app is closed

public void setSharedPreference() 
{
    if (stayInCheckBox.isChecked()) {
        String s1 = "true";
        sharedpreferences = getSharedPreferences("myrem", MODE_PRIVATE);
        SharedPreferences.Editor editor = sharedpreferences.edit();
        editor.putString("name", editUser.getText().toString());
        editor.putString("check", s1);
        editor.commit();
    } else {
        String s2 = "false";
        sharedpreferences = getSharedPreferences("myrem", MODE_PRIVATE);
        SharedPreferences.Editor editor = sharedpreferences.edit();
        editor.putString("check", s2);
        editor.commit();
    }
}
试试这个:

public void saveCheckBoxState(boolean isChecked){
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
    SharedPreferences.Editor editor = prefs.edit();

    editor.putBoolean("key",isChecked);
    editor.commit();
}
onCheckedChanged()中调用
saveCheckBoxState(布尔)


在活动的
onResume()
中调用
getCheckBoxState()

为“记住我”功能使用共享首选项,如果复选框被选中,只需将布尔值设置为true,否则为false

     CheckBox stayInCheckBox = (CheckBox) findViewById(R.id.check_remember);
 SharedPreferences sharedpreferences = PreferenceManager  .getDefaultSharedPreferences(getApplicationContext());


// put this code in oncreate method 
public void stayIn()
{
    sharedpreferences = getSharedPreferences("myrem", MODE_PRIVATE);
    String s3 = sharedpreferences.getString("check", "false");

    String name = sharedpreferences.getString("name", null);


    if (s3.equals("true")) {
        stayInCheckBox.setChecked(true);
        editUser.setText(name);
        editPassword.setText(pass);
    } else {
        stayInCheckBox.setChecked(false);
    }
}

// put this code when app is closed

public void setSharedPreference() 
{
    if (stayInCheckBox.isChecked()) {
        String s1 = "true";
        sharedpreferences = getSharedPreferences("myrem", MODE_PRIVATE);
        SharedPreferences.Editor editor = sharedpreferences.edit();
        editor.putString("name", editUser.getText().toString());
        editor.putString("check", s1);
        editor.commit();
    } else {
        String s2 = "false";
        sharedpreferences = getSharedPreferences("myrem", MODE_PRIVATE);
        SharedPreferences.Editor editor = sharedpreferences.edit();
        editor.putString("check", s2);
        editor.commit();
    }
}
有关共享首选项,请参阅以下链接:-


为“记住我”功能使用共享首选项,如果复选框被选中,则只需将布尔值设置为true,否则为false

有关共享首选项,请参阅以下链接:-



我有一个问题。我不熟悉SharedReference,我正在这个应用程序中使用sqlite数据库来存储数据。在一个应用程序中使用sqlite数据库和sharepreference可以吗?你能给我一个示例吗?:)你可以两者都使用。或者,您可以将复选框状态存储在sqlite数据库中,因为您已经有了它。@HakHak-在同一个应用程序中使用
SharedReferences
和sqlite完全没有问题。框架独立地处理它们。或者,您可以按照cybersam的建议,向数据库中添加一个表以保持检查状态(可能还有其他值)。我有一个问题。我不熟悉SharedReferences,我正在使用此应用程序中的sqlite数据库来存储数据。在一个应用程序中使用sqlite数据库和sharepreference可以吗?您能给我一个示例吗?:)您可以同时使用这两种数据库。或者,您可以将复选框状态存储在sqlite数据库中,因为您已经有了它。@HakHak-在同一个应用程序中使用
SharedReferences
和sqlite完全没有问题。框架独立地处理它们。或者,您可以按照cybersam的建议,向数据库中添加一个表以保持检查状态(可能还有其他值)。我有一个问题。我不熟悉SharedReferences,我正在使用此应用程序中的sqlite数据库来存储数据。在一个应用程序中使用sqlite数据库和sharepreference可以吗?您能给我一个示例吗?:)您可以同时使用这两种数据库。或者,您可以将复选框状态存储在sqlite DB中,因为您已经有了它。我有一个问题。我不熟悉SharedReferences,我正在使用此应用程序中的sqlite数据库来存储数据。在一个应用程序中使用sqlite数据库和sharepreference可以吗?您可以给我一个示例吗?:)您可以同时使用这两种数据库。或者,您可以将复选框状态存储在sqlite DB中,因为您已经有了复选框状态。请尝试我提供的解决方案。@RiteshGune我将尝试尝试我提供的解决方案。@RiteshGune我将尝试ITI如果OP的目标是API级别9或更高版本,则(在此代码中)最好使用
editor.apply()
取而代之。@TedHopp
commit
apply
之间有什么不同?为什么会更好?@TedHopp你所说的editor.apply()是什么意思?我的目标是API 19highest@HakHak-
apply()
是在API 9中引入的。它实际上在一个单独的线程中写入持久性存储,从而使UI线程保持更高的响应速度。您可以在API 8中使用
SharedReferences
非常好;只要使用
commit()
而不是
apply()
@HakHak,您就可以使用SharedReference,无论最低的API是什么。然而,API9中引入了apply(),而从API1开始就引入了commit()。因此,如果您打算同时使用这两种方法,则必须在代码中检查API版本,然后相应地选择提交或应用。如果OP的目标是API级别9或更高版本,则最好(在此代码中)使用
editor.apply()
。@TedHopp
commit
apply
之间有什么不同?为什么会更好?@TedHopp你所说的editor.apply()是什么意思?我的目标是API 19highest@HakHak-
apply()
是在API 9中引入的。它实际上在一个单独的线程中写入持久性存储,从而使UI线程保持更高的响应速度。您可以在API 8中使用
SharedReferences
非常好;只要使用
commit()
而不是
apply()
@HakHak,您就可以使用SharedReference,无论最低的API是什么。然而,API9中引入了apply(),而从API1开始就引入了commit()。因此,如果您打算同时使用这两种方法,那么您必须在代码中检查API版本,然后相应地选择提交或应用。