【问题标题】:Shared Preferences Boolean共享首选项布尔值
【发布时间】:2017-10-28 07:42:09
【问题描述】:

我是一个初学者,我正在尝试使用布尔值来掌握这种共享首选项方法。一个按钮是更改值,第二个按钮是读取它。但它说有一个 (string,int) 的要求,我不知道我在哪里犯了错误。你能帮忙吗?

public class MainActivity extends AppCompatActivity {

SharedPreferences preference;
SharedPreferences.Editor editor;
Button btn;
Button btn2;
Context context;
Boolean glowa;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    btn2 = (Button) findViewById(R.id.btn2);
    btn = (Button) findViewById(R.id.btn);

    SharedPreferences preference = PreferenceManager.getDefaultSharedPreferences(this);
    boolean glowa = preference.getBoolean("GLOWA", false);

    btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            editor.putBoolean("GLOWA", true);
            editor.apply();

        }
    });

    btn2.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            SharedPreferences preference;
            SharedPreferences.Editor editor;
            preference = getBaseContext().getSharedPreferences("GLOWA");
            if (glowa == true) {
                Toast.makeText(MainActivity.this, "true", Toast.LENGTH_LONG).show();
            } else {
                Toast.makeText(MainActivity.this, "mistake", Toast.LENGTH_LONG).show();
            }
        }
    });
}
}

【问题讨论】:

  • 听起来您没有为您的某个功能提供正确的输入。请发布您的完整错误消息。您需要找出哪个函数有问题并确定缺少哪个所需的值。

标签: android boolean sharedpreferences


【解决方案1】:

要从 SharedPreferences 中获取,请使用以下代码:

SharedPreference sharedPreferences = getSharedPreferences("MyPrefs", Context.MODE_PRIVATE);
sharedPreferences.getBoolean("key",false);

要将数据存储在 SharedPreferences 中,请使用以下代码:

SharedPreference sharedPreferences = getSharedPreferences("MyPrefs", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedpreferences.edit();
editor.putBoolean("key", true);
editor.apply();

【讨论】:

    【解决方案2】:

    改变这个

    preference = getBaseContext().getSharedPreferences("GLOWA");
    

    SharedPreferences sharedpreferences = getSharedPreferences("GLOWA", Context.MODE_PRIVATE);
    sharedpreferences.getBoolean("GLOWA",false); // return false if key not found in preference file
    
    SharedPreferences.Editor editor = sharedpreferences.edit();
    editor.putBoolean("GLOWA", true);
    editor.commit();       
    

    您想要的首选项文件名与布尔值的键相同。最好选择两个不同的名称。

    【讨论】:

      【解决方案3】:

      我修复了你的类和 sharedpreferences 初始化。我希望这可以解决您从 sharedpreference 中获取布尔值的问题

      public class MainActivity extends AppCompatActivity {
      
          SharedPreferences preference;
          SharedPreferences.Editor editor;
          Button btn;
          Button btn2;
          Context context;
          Boolean glowa;
      
          @Override
          protected void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.activity_main);
      
              btn2 = (Button) findViewById(R.id.btn2);
              btn = (Button) findViewById(R.id.btn);
      
              preference = this.getSharedPreferences("myAppPrefs", Context.MODE_PRIVATE);
              editor = sharedpreferences.edit();
      
              btn.setOnClickListener(new View.OnClickListener() {
                  @Override
                  public void onClick(View v) {
                      editor.putBoolean("GLOWA", true);
                      editor.apply();
      
                  }
              });
      
              btn2.setOnClickListener(new View.OnClickListener() {
                  @Override
                  public void onClick(View v) {
                      if (preference.getBoolean("GLOWA",false)) {
                          Toast.makeText(MainActivity.this, "true", Toast.LENGTH_LONG).show();
                      } else {
                          Toast.makeText(MainActivity.this, "mistake", Toast.LENGTH_LONG).show();
                      }
                  }
              });
          }
      }
      

      【讨论】:

      • Error:(34, 22) 错误:没有找到适合 getSharedPreferences(int) 方法的方法 Context.getSharedPreferences(String,int) 不适用(实际参数列表和形式参数列表的长度不同)方法 ContextWrapper .getSharedPreferences(String,int) 不适用(实际参数列表和形式参数列表的长度不同)我得到了这样的东西:(
      • PreferenceManager.getDefaultSharedPreferences(this);this.getSharedPreferences("myAppPrefs", Context.MODE_PRIVATE);
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-01-09
      • 2012-08-04
      • 1970-01-01
      • 2020-08-12
      • 1970-01-01
      • 1970-01-01
      • 2017-01-28
      相关资源
      最近更新 更多