Android SharedReferences,不工作。变量值仍然=0
我正在寻求帮助。在我的一项活动中,我有一个可变id_钱包,我想将该值保存在SharedReferences中,并在其他活动中使用。怎么做?代码简略。我在其他类中使用变量wallet\u idAndroid SharedReferences,不工作。变量值仍然=0,android,sharedpreferences,Android,Sharedpreferences,我正在寻求帮助。在我的一项活动中,我有一个可变id_钱包,我想将该值保存在SharedReferences中,并在其他活动中使用。怎么做?代码简略。我在其他类中使用变量wallet\u id public class ChooseWallet extends AppCompatActivity { public static int wallet_id; listViewChooseWallet.setOnItemClickListener(new AdapterView.
public class ChooseWallet extends AppCompatActivity {
public static int wallet_id;
listViewChooseWallet.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
wallet_id= (position+1);
SaveInt("key",wallet_id);
Toast.makeText(getApplicationContext(), "Wallet number "+(position+1)+" active!", Toast.LENGTH_SHORT).show();
}
});
public void SaveInt(String key, int value){
sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putInt(key, value);
editor.commit();
}
public void LoadInt(Context mContext){
sharedPreferences = PreferenceManager.getDefaultSharedPreferences(mContext);
walllet_id = sharedPreferences.getInt("key", 1);
}
公共类ChooseWallet扩展AppCompative活动{
公共静态int-U-id;
listViewChooseWallet.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
钱包标识=(位置+1);
SaveInt(“钥匙”,钱包标识);
Toast.makeText(getApplicationContext(),“钱包号码”+(位置+1)+“活动!”,Toast.LENGTH\u SHORT.show();
}
});
公共void SaveInt(字符串键,int值){
SharedReferences=PreferenceManager.GetDefaultSharedReferences(getApplicationContext());
SharedReferences.Editor=SharedReferences.edit();
编辑器.putInt(键,值);
commit();
}
公共void LoadInt(上下文mContext){
SharedReferences=PreferenceManager.GetDefaultSharedReferences(mContext);
wallet_id=SharedReferences.getInt(“key”,1);
}
其他活动(简而言之):
公共类加载项扩展了AppCompative活动{
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u add\u out);
addoutbalnce.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
if(Double.parseDouble(amount.getText().toString())>0&&ChooseWallet.wallet\u id!=0&&amount.getText().toString()!=null){
double amount=double.parseDouble(amount.getText().toString());
金额=(-金额);
字符串coment=commentout.getText().toString();
ChooseWallet wb=新的ChooseWallet();
LoadInt(getApplicationContext());
db.UpdateAmount(选择钱包id、金额);
db.AddTransaction(选择wallet.wallet\u id、金额、金额、id\u cat、日期);
Toast.makeText(getApplicationContext(),“Add”,Toast.LENGTH\u SHORT.show();
}
else if(Double.parseDouble(amount.getText().toString())<0 | | amount.getText().toString()==null){
amount.setError(“Error!”);
}
}
});
您的模拟器可能不保存共享参考。请在手机启动应用程序中尝试。使用LoadInt()
方法在其他活动中编码以获取wallet\u id值。我尝试了,但方法仍将wallet\u id设置为0或出现错误java.lang.NullPointerException:尝试调用虚拟方法“android.content.Context android.content.getApplicationContext()'在com.example.xxx.xxx.ChooseWallet.LoadInt(ChooseWallet.java:70)dude上的android.content.ContextWrapper.getApplicationContext(ContextWrapper.java:106)上的空对象引用上,将LoadInt
更改为LoadInt(Context mContext){SharedReferences=PreferenceManager.GetDefaultSharedReferences(mContext);…}
然后通过从任何活动传递getApplicationContext()
来调用它OK。我这样做了,但仍然没有设置id。\u wallet.Show从这两个活动中更新的代码
public class AddOut extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_add_out);
addoutbalnce.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (Double.parseDouble(amount.getText().toString()) > 0 && ChooseWallet.wallet_id != 0 && amount.getText().toString() != null) {
double amount = Double.parseDouble(amount.getText().toString());
amount= (-amount);
String coment = commentout.getText().toString();
ChooseWallet wb = new ChooseWallet();
wb.LoadInt(getApplicationContext());
db.UpdateAmount(ChooseWallet.wallet_id,amount);
db.AddTransaction(ChooseWallet.wallet_id, amount, coment, id_cat, date);
Toast.makeText(getApplicationContext(), "Add", Toast.LENGTH_SHORT).show();
}
else if(Double.parseDouble(amount.getText().toString()) < 0 || amount.getText().toString() == null){
amount.setError("Error!");
}
}
});