java
1 @Override
2 protected void onCreate(Bundle savedInstanceState) {
3 super.onCreate(savedInstanceState);
4 setContentView(R.layout.activity_main);
5
6 Button button = findViewById(R.id.button);
7 TextView syuusi = findViewById(R.id.result);
8 EditText editText = findViewById(R.id.text1);
9
10 SharedPreferences preferences = getSharedPreferences("resultNumber",MODE_PRIVATE);
11 int x = preferences.getInt("sum",0);
12 syuusi.setText(String.valueOf(x));//保存内容を取得して表示する
13
14 button.setOnClickListener(new View.OnClickListener() {
15 @Override
16 public void onClick(View v) {
17
18 //EditTextに入力された文字を取得
19 String str1 = editText.getText().toString();
20 //入力されたString型の文字をint型に変換
21 int num1 = Integer.parseInt(str1);
22
23 //int x = preferences.getInt("sum",0);//保存された数値を取得
24 int result = x + num1;//保存された値とついさっき入力された数値を足す
25
26 //editorは保存された値を編集するためのもの
27 SharedPreferences.Editor editor = preferences.edit();
28 editor.putInt("sum",result);//さっき合計したものを保存
29 editor.apply();//アプリに反映させる
30
31 syuusi.setText(String.valueOf(result));//表示
32
33 }
34 });
35 }
###あなたのコードの順序
保存内容を取得
↓
EditTextの文字の内容を取得・変換
↓
入力内容を保存
↓
入力内容と保存内容を足す←保存した後に書いてるから足した数値を保存できていない
↓
収支を表示
###私のコードの順序
保存内容を取得・表示
↓
入力内容を取得・変換
↓
保存内容を取得←onClick内に書くことで押されるたびに取得してくれる
**なぜ押されるたびに取得しないといけないのか?**
onClick内の場合
前回押されたときの数値+現在入力された数値
onClick外の場合
起動されたときに一回だけ実行されて取得した数値+現在入力した数値
なのでonClick外で起動時に一回だけ取得した数値は前回の保存内容が反映されず、ずっと同じ数値です
↓
入力内容と保存内容を合計・保存
↓
収支を表示
このようにプログラムの順序を意識してみると何が問題だったのかわかりやすいと思います!
あとこの状態だと確定を押したときにアプリが落ちてしまうため、try文の使い方なども調べてみるといいかもしれません