質問よろしくお願いします。
まだまだ勉強したての初心者です。
androidの開発中でゲームを作成していて、
今回のゲーム結果をA部分にタイム表示し、それをBの部分に保存(前回のデータを上回っていたら書き換え)
という風にしたいのですが、まず保存自体が四苦八苦しておりできません。
lang
1コード 2 3SharedPreferences pref = this.getSharedPreferences("user_data", Context.MODE_PRIVATE); 4 5 // プリファレンスに書き込むためのEditorオブジェクト取得 6 Editor editor = pref.edit(); 7 // user_id というキーで値を保存 8 editor.putString("user_id", inputs);//inputsは秒数を表示しているtextview 9 // ここで実際にファイルに書き込む 10 editor.commit(); 11 12 // 保存されている値を呼び出し 13 ((SharedPreferences) tv2).getInt("user_id", -1);//textviewのtv2に表示したい
今記述しているコードは上記ですがエラーが出ます。
デバッグで見てみてもtv2には反映されていません。
上記の正しい記述や解決方法、できれば前回の記録との比較方法も教えて頂けたらありがたいです。
ご教授よろしくお願いします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
ベストアンサー
A,B,C部分て何をさしていますか?
質問とコードを照らし合わせてもその辺があまり読み取れないです。
ですので追記のコードでおかしそうな部分を指摘します。
editor.commit()を2回していますが、その間に値の変更処理はないので最後のeditor.commit()は意味が無いです。
ちなみに以下のメソッドの第2引数はデフォルト値です。
値が存在しなかった場合に取得する値です。
pref1.getString("g2byou", inputs)
的外れでしたらすみません。
追記:
適当なサンプルを実装してみました。
ボタンを押下するとランダム値と最大値がTextViewに表示されます。
最大値はPrefarenceに保存しているのでアプリ再起動後も有効です。
レイアウトはTextView2つ、Button1つなので適当に作成してください。
lang
1 private TextView textViewA; 2 private TextView textViewB; 3 private SharedPreferences pref; 4 private int max; 5 6 @Override 7 protected void onCreate(Bundle savedInstanceState) { 8 super.onCreate(savedInstanceState); 9 setContentView(R.layout.activity_main); 10 11 textViewA = (TextView) findViewById(R.id.textView1); 12 textViewB = (TextView) findViewById(R.id.textView2); 13 Button button = (Button) findViewById(R.id.button1); 14 pref = getSharedPreferences("user_data", MODE_PRIVATE); 15 button.setOnClickListener(new OnClickListener() { 16 @Override 17 public void onClick(View v) { 18 int value = (int) (Math.random() * 1000); 19 if (value > max) { 20 max = value; 21 pref.edit().putInt("max", max).commit(); 22 textViewB.setText("" + max); 23 } 24 textViewA.setText("" + value); 25 26 } 27 }); 28 max = pref.getInt("max", 0); 29 textViewA.setText(""); 30 textViewB.setText("" + max); 31 32 }
追記2:
なるべく変更しないで修正しました。
コンパイルも行っていないのでそのまま動くか不明です。
画面遷移で変更した部分があります。
各画面(2,3,4)から遷移する場合に画面IDをIntentに"INPUTid"としてセットしてあげてください。なので画面毎に"INPUT","INPUT3","INPUT4"と分けないで"INPUT","INPUTs","INPUTms"で統一して修正してください。
lang
1 2 @Override 3 protected void onCreate(Bundle savedInstanceState) { 4 super.onCreate(savedInstanceState); 5 setContentView(R.layout.activity_result); 6 Intent intent = getIntent(); 7 8 TextView textview1 = (TextView) findViewById(R.id.textView1); 9 TextView textview3 = (TextView) findViewById(R.id.textView3); 10 TextView textview5 = (TextView) findViewById(R.id.textView5); 11 12 TextView tv1 = (TextView) findViewById(R.id.tv1); 13 TextView tv2 = (TextView) findViewById(R.id.tv2); 14 TextView tv3 = (TextView) findViewById(R.id.tv3); 15 16 TextView tv4 = (TextView) findViewById(R.id.tv4); 17 TextView tv5 = (TextView) findViewById(R.id.tv5); 18 TextView tv6 = (TextView) findViewById(R.id.tv6); 19 20 TextView tv7 = (TextView) findViewById(R.id.tv7); 21 TextView tv8 = (TextView) findViewById(R.id.tv8); 22 TextView tv9 = (TextView) findViewById(R.id.tv9); 23 24 int id = intent.getIntExtra("INPUTid", -1); // 画面idを送る 25 String hun = intent.getStringExtra("INPUT"); 26 String byou = intent.getStringExtra("INPUTs"); 27 String mbyou = intent.getStringExtra("INPUTms"); 28 textview1.setText(hun); 29 textview3.setText(byou); 30 textview5.setText(mbyou); 31 32 int ihun = Integer.valueOf(hun); 33 int ibyou = Integer.valueOf(byou); 34 int imbyou = Integer.valueOf(mbyou); 35 36 showScore(tv1, tv2, tv3, 2, id, ihun, ibyou, imbyou); 37 showScore(tv4, tv5, tv6, 3, id, ihun, ibyou, imbyou); 38 showScore(tv7, tv8, tv9, 4, id, ihun, ibyou, imbyou); 39 40 } 41 42 private void showScore(TextView tf, TextView ts, TextView tt, int id, int rcvId, int hun, int byou, int mbyou) { 43 SharedPreferences pref = getSharedPreferences("user_data", MODE_PRIVATE); 44 int minhun = pref.getInt("g" + id + "hun", 60); 45 int minbyou = pref.getInt("g" + id + "byou", 60); 46 int minmbyou = pref.getInt("g" + id + "mbyou", 1000); 47 if (minhun >= 60) { 48 tf.setText(""); 49 ts.setText(""); 50 tt.setText(""); 51 } else { 52 tf.setText(minhun + ""); 53 ts.setText(minbyou + ""); 54 tt.setText(minmbyou + ""); 55 } 56 if (id == rcvId) { 57 long msec = (hun * 60 + byou) * 1000 + mbyou; 58 if ((minhun * 60 + minbyou) * 1000 + minmbyou > msec) {// 更新してたら上書き 59 pref.edit().putInt("g" + id + "hun", hun).putInt("g" + id + "byou", byou) 60 .putInt("g" + id + "mbyou", mbyou).commit(); 61 tf.setText(hun + ""); 62 ts.setText(byou + ""); 63 tt.setText(mbyou + ""); 64 } 65 } 66 }
投稿2014/10/16 02:37
総合スコア410
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2014/10/16 03:02
2014/10/16 04:12
2014/10/16 04:42
2014/10/16 13:10
2014/10/17 04:32
2014/10/17 14:28
2014/10/18 18:43
2014/10/20 11:05
2014/10/20 17:01
2014/10/20 17:53
2014/10/21 03:44
2014/10/21 06:13
2014/10/21 06:15
2014/10/21 07:59
2014/10/21 08:48
2014/10/21 16:33
2014/10/22 08:05
2014/10/22 15:41
2014/10/23 02:37
2014/10/23 06:08
2014/10/23 06:16
2014/10/23 06:29
2014/10/23 13:47