Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 跨活动在SharedReference中存储值_Java_Android_Sharedpreferences - Fatal编程技术网

Java 跨活动在SharedReference中存储值

Java 跨活动在SharedReference中存储值,java,android,sharedpreferences,Java,Android,Sharedpreferences,我是Android新手,有一个任务是在我的大学里开发一个小项目提交,我已经尽了最大的努力,但现在我需要一些帮助 让我先告诉你,我想做什么? 我有两个活动,main活动和AccountActivity 在main活动中我正在使用按钮切换到AccountActivity 在AccountActivity中,我试图将strBalance值存储在SharedReference中,但每当我点击back按钮,然后再次来到AccountActivity时,总是会得到“1000”而不是我存储在SharedRef

我是Android新手,有一个任务是在我的大学里开发一个小项目提交,我已经尽了最大的努力,但现在我需要一些帮助

让我先告诉你,
我想做什么?

我有两个活动,
main活动
AccountActivity

main活动中
我正在使用
按钮
切换到
AccountActivity

AccountActivity
中,我试图将
strBalance
值存储在SharedReference中,但每当我点击
back
按钮,然后再次来到
AccountActivity
时,总是会得到
“1000”
而不是我存储在
SharedReference
中的值

以下是AccountActivity.java的完整代码:-

public class AccountActivity extends Activity {

    EditText editAmount;
    int strAmount;
    Button btnPayment;
    TextView textBalance;
    int strBalance; 

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_account);      

        editAmount = (EditText) findViewById(R.id.editAmt);
        btnPayment = (Button) findViewById(R.id.btnPay);
        textBalance = (TextView) findViewById(R.id.textBalance);

        strBalance = 1000;

        textBalance.setText("Your current balance is: $ "+strBalance);      

        btnPayment.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub              
                SharedPreferences pref = getApplicationContext().getSharedPreferences("MyPref", MODE_PRIVATE);  
                Editor editor = pref.edit();

                strAmount = Integer.parseInt(editAmount.getText().toString().trim()); // user input             

                if(strAmount>strBalance) {
                    Toast.makeText(AccountActivity.this, "You don't have enough balance", Toast.LENGTH_SHORT).show();
                }
                else 
                {
                    strBalance = strBalance - strAmount; // 1000 - 500 = 500
                    textBalance.setText("Your current balance is: $ "+strBalance);  
                    Log.v("strBalance", String.valueOf(strBalance)); // 500
                    editor.putInt("key_balance", strBalance);
                    editor.commit();
                }
            }
        });
    }

}

-检查首选项和键名是否相同。

这应该可以正常工作:

SharedPreferences pref = getApplicationContext().getSharedPreferences("MyPref", MODE_PRIVATE);
if (pref.getInt("key_balance", 1000) != null) {
    strBalance = pref.getInt("key_balance",1000);
} else {
    strBalance = 1000;
}
而不是

strBalance = 1000;
这样做,

SharedPreferences sharedPreferences = getSharedPreferences("MyPref", MODE_PRIVATE);
       int any_variable = sharedPreferences.getInt("key_balance", 0);

删除初始化,并在onCreate中执行此操作,然后在strBalance时使用新变量。

您没有从
SharedReferences

onResume()中编写代码,如下所示:

@Override
protected void onResume() {
    super.onResume();
    // SharedPreferences retrieval code
}

要了解有关
SharedReferences
的更多信息,请检查此项。

使用日志消息并检查其是否正确保存。打印strBalance的值,然后保存并检查是否获得正确的值。请发布您的主要活动的部分,您正在尝试检索保存的数据。我不是在MainActivity中检索数据,我在AccountActivity中存储数据,并希望在恢复时在同一个活动中显示,我已经检查了我是否按照我的要求在strBalance中获得了价值Hoo。。。我找到了原因,我使用strBalance=1000;在onCreate(..)中,但我如何处理@kesh1234?为什么要在onCreate中初始化?酷。谢谢你接受答案。快乐编码。