java - 与 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));
我该如何解决?谢谢!
解决方案
当您将值保存到 时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));
}
}
推荐阅读
- hibernate - JPA:如何联合来自不同模式的表
- java - Java版本混淆需要设置JAVA_HOME为Java11
- css - 我对与 Transform 相关的分配有疑问
- vue.js - 将标头从 Apollo Vue 发送到 Node
- python - 与具有已知误差(即 x、y、ey)的输入训练数据共同区域化
- firebase - 避免用户在创建时使用 Firebase 登录
- javascript - Jasmine 业力单元测试中的模拟商店选择
- event-sourcing - EventStoreDB 是否通过消费者端的事件键提供消息排序?
- c# - MongoDB.Driver.MongoCommandException:命令 getMore 失败:BSONObj 大小:45888169 (0x2BC32A9) 无效。大小必须介于 0 和 16793600(16MB) 之间
- mysql - 在主查询和子查询中使用相同的别名