首页 > 解决方案 > 与 sharedpreference 共享一个 int 变量

问题描述

我有一个简单的问题:在第一个活动中,我将一个变量保存为一个整数:

valsat2= findViewById(R.id.valsatu);
sharedpreferences = getSharedPreferences(valsat, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedpreferences.edit();
int n = Integer.parseInt(valsat2.getText().toString());
editor.putInt(valsat, n);
editor.commit();

在第二个活动中,我想使用这个 int 数字,但是如果我使用这个代码,它会返回给我 0:

public static final int valsat = 0 ;
TextView sat = (TextView) findViewById(R.id.valoresaturazione);    
sharedpreferences = getSharedPreferences("valsat", Context.MODE_PRIVATE);
int valsatn = sharedpreferences.getInt("valsat", 0);
sat.setText(Integer.toString(valsatn));

我该如何解决?谢谢!

标签: javaandroidsharedpreferences

解决方案


当您将值保存到 时SharedPreferences,您可以使用:

editor.putInt(valsat, n);

所以你使用变量作为这个值的键valsat,但它的值是什么?是"valsat"吗?
如果是,那么您应该在其他活动中获得正确的价值,但我想不是。
所以改成这样:

editor.putInt("valsat", n);

您还为文件名使用相同的变量SharedPreferences,但在其他活动中您再次使用字符串"valsat"
这是2个不同的东西。
编辑
不要使用 2 个共享首选项文件。使用一个名称为“valsat”的名称:

SharedPreferences sharedpreferences;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    btnNew = (Button) findViewById(R.id.button1);
    valsat2= findViewById(R.id.valsatu);
    valbic2= findViewById(R.id.valbicu);

    sharedpreferences = getSharedPreferences("valsat", Context.MODE_PRIVATE);

    btnNew.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {

            String n= valsat2.getText().toString();
            String m= valbic2.getText().toString();

            SharedPreferences.Editor editor = sharedpreferences.edit();
            editor.putString("valsat", n);
            editor.putString("valbic", m);

            editor.commit();
            Intent intent = new Intent(MainActivity.this, Main3Activity.class);
            startActivity(intent);
        }
    });

}

 public class Main5Activity extends AppCompatActivity {
    SharedPreferences sharedpreferences;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main5);
        TextView sat = (TextView) findViewById(R.id.valoresaturazione);
        TextView bic = (TextView) findViewById(R.id.valorebicarbonati);

        sharedpreferences = getSharedPreferences("valsat", Context.MODE_PRIVATE);

        int valbicn = sharedpreferences.getInt("valbic", 0);
        int valsatn = sharedpreferences.getInt("valsat", 0);

        sat.setText(String.valueOf(valsatn));
        bic.setText(String.valueOf(valbicn));
    }
}

推荐阅读