質問編集履歴

2

解り易く書き直したいため

2016/06/05 22:31

投稿

19776340
19776340

スコア17

test CHANGED
@@ -1 +1 @@
1
- 画像内の表示書き込み、読み込みするにはどうしらよいでしょか?
1
+ AndroidプログラミングでSharedPreferencesゲットするためのgetSharedPreferencesを使とエラーが出ます。
test CHANGED
@@ -1,343 +1,85 @@
1
1
  ```ここに言語を入力
2
2
 
3
- public class SurfaceViewEx extends Activity {
3
+ public class SurfaceEx extends SurfaceView implements SurfaceHolder.Callback, Runnable {
4
4
 
5
- SharedPreferences pref;
5
+ /** コンストラクタ */
6
6
 
7
+ public SurfaceEx(Context context, AttributeSet attr) {
8
+
9
+ super(context, attr);
10
+
11
+ // SurfaceHolder の取得
12
+
13
+ SurfaceHolder holder = getHolder();
14
+
15
+ // SurfaceHolder に コールバックを設定
16
+
17
+ holder.addCallback(this);
18
+
19
+ holder.setFixedSize(getWidth(), getHeight());
20
+
21
+ @Override
22
+
7
- SurfaceEx surface;
23
+ public void run() {
24
+
25
+ while (true && thread != null) {
26
+
27
+ // ホルダーからキャンバスの取得
28
+
29
+ Canvas canvas = getHolder().lockCanvas();
30
+
31
+ // 描画処理
32
+
33
+ draw(canvas);
34
+
35
+ // 描画内容の確定
36
+
37
+ getHolder().unlockCanvasAndPost(canvas);
38
+
39
+ }
40
+
41
+ }
42
+
43
+ /** 描画処理 */
44
+
45
+ @Override
46
+
47
+ public void draw(Canvas canvas) {
48
+
49
+ super.draw(canvas);
50
+
51
+ Paint paint = new Paint();
52
+
53
+ // 現在の状態を保存
54
+
55
+ canvas.save();
56
+
57
+ // Canvasの背景色を白で塗る
58
+
59
+ canvas.drawColor(Color.WHITE);
8
60
 
9
61
 
10
62
 
11
- OnClickListener listener = new OnClickListener() {
63
+ SharedPreferences pref = getSharedPreferences("pref", MODE_PRIVATE);
12
64
 
13
- @Override
65
+ SharedPreferences.Editor editor = pref.edit();
14
66
 
15
- public void onClick(View v) {
67
+ editor.putInt("count", score);
16
68
 
17
- switch(v.getId()) {
69
+ editor.commit();
18
70
 
19
- case R.id.blue_box: // 青い四角を描画
20
-
21
- surface.countUp();
22
-
23
- break;
24
-
25
- case R.id.red_char: // 赤い文字を描画
26
-
27
- surface.red();
28
-
29
- break;
30
-
31
- case R.id.finish_char:
32
-
33
- saveButtonClick();
34
-
35
- break;
36
-
37
- case R.id.LoadButton:
38
-
39
- loadButtonClick();
40
-
41
- break;
42
-
43
- }
71
+ }
44
-
45
- }
46
-
47
- };
48
-
49
-
50
-
51
- @Override
52
-
53
- public void onCreate(Bundle savedInstanceState) {
54
-
55
- super.onCreate(savedInstanceState);
56
-
57
- setContentView(R.layout.test2);
58
-
59
- surface = (SurfaceEx)findViewById(R.id.sv_main);
60
-
61
- pref = PreferenceManager.getDefaultSharedPreferences(this);
62
-
63
- // リスナーの設定
64
-
65
- findViewById(R.id.blue_box).setOnClickListener(listener);
66
-
67
- findViewById(R.id.red_char).setOnClickListener(listener);
68
-
69
- findViewById(R.id.finish_char).setOnClickListener(listener);
70
-
71
- findViewById(R.id.LoadButton).setOnClickListener(listener);
72
-
73
- }
74
-
75
- private void saveButtonClick() {
76
-
77
- // 書き込み
78
-
79
- finish();
80
-
81
- }
82
-
83
- private void loadButtonClick() {
84
-
85
- //読み込み
86
-
87
-
88
-
89
- }
90
-
91
-
92
-
93
- @Override
94
-
95
- public void onPause() {
96
-
97
- super.onPause();
98
-
99
- surface.surfaceDestroyed(null);
100
-
101
- }
102
-
103
- }
104
72
 
105
73
  ```
106
74
 
107
- ```
75
+ 先の質問を編集しました。省略してますが、SharedPreferences のとこのgetSharedPreferencesとMODE_PRIVATEが赤字になりエラーが出ます。
108
76
 
109
- public class SurfaceEx extends SurfaceView implements SurfaceHolder.Callback, Runnable {
77
+ それで調べたらrun()の中に記入するとエラーが出るからgetSharedPreferencesの主たるContextをrun()の外部に書けば良いらしいので、
110
78
 
111
-
79
+ /コンストラクタ/内にContext mAppContext;と記入してSharedPreferences pref = mAppContext.getSharedPreferences("pref", mAppContext.MODE_PRIVATE);
112
80
 
113
- private int score; // 個数1
81
+ と記入したら赤字エラーは出なくなりましたが、実機で起動させて終了して閉じたらスマホ画面に「問題が発生したため「アプリ」を終了します」とでて、それ以降立ち上げようとするとこの画面が出てエラーになります。
114
82
 
115
- private int ko; // 個数2
83
+ SharedPreferencesを使用するにはどのようにしたらよいでしょうか?
116
84
 
117
- private double Cotae; // 個数2÷個数1=
118
-
119
- private Thread thread;
120
-
121
- private boolean flag1 = true;
122
-
123
- private boolean flag2 = true;
124
-
125
-
126
-
127
- /** コンストラクタ */
128
-
129
- public SurfaceEx(Context context, AttributeSet attr) {
130
-
131
- super(context, attr);
132
-
133
- // SurfaceHolder の取得
134
-
135
- SurfaceHolder holder = getHolder();
136
-
137
- // SurfaceHolder に コールバックを設定
138
-
139
- holder.addCallback(this);
140
-
141
- holder.setFixedSize(getWidth(), getHeight());
142
-
143
- // フォーカスをあてる
144
-
145
- setFocusable(true);
146
-
147
- }
148
-
149
-
150
-
151
- @Override
152
-
153
- public void surfaceCreated(SurfaceHolder holder) {
154
-
155
- thread = new Thread(this);
156
-
157
- thread.start();
158
-
159
- }
160
-
161
-
162
-
163
- @Override
164
-
165
- public void surfaceDestroyed(SurfaceHolder holder) {
166
-
167
- thread = null;
168
-
169
- }
170
-
171
-
172
-
173
- @Override
174
-
175
- public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {
176
-
177
- // TODO 自動生成されたメソッド・スタブ
178
-
179
- }
180
-
181
-
182
-
183
- @Override
184
-
185
- public void run() {
186
-
187
- while (true && thread != null) {
188
-
189
- // ホルダーからキャンバスの取得
190
-
191
- Canvas canvas = getHolder().lockCanvas();
192
-
193
- // 描画処理
194
-
195
- draw(canvas);
196
-
197
- // 描画内容の確定
198
-
199
- getHolder().unlockCanvasAndPost(canvas);
200
-
201
- }
202
-
203
- }
204
-
205
- /** 描画処理 */
206
-
207
- @Override
208
-
209
- public void draw(Canvas canvas) {
210
-
211
- super.draw(canvas);
212
-
213
- Paint paint = new Paint();
214
-
215
- // 現在の状態を保存
216
-
217
- canvas.save();
218
-
219
- // Canvasの背景色を白で塗る
220
-
221
- canvas.drawColor(Color.WHITE);
222
-
223
-
224
-
225
- if(flag1 == true) {
226
-
227
- paint.setColor(Color.GREEN);
228
-
229
- paint.setTextSize(50);
230
-
231
- canvas.drawText("回転数"+num2str(score,0), 10, 70, paint);
232
-
233
- }
234
-
235
- if(flag2 == true) {
236
-
237
- //メダルの表示
238
-
239
- paint.setColor(Color.BLUE);
240
-
241
- paint.setTextSize(50);
242
-
243
- canvas.drawText("COIN"+coin2str(ko,6), 500, 70, paint);
244
-
245
- }
246
-
247
-
248
-
249
- double val1 = ((double) ko / score)*100;
250
-
251
- Cotae = val1;
252
-
253
- paint.setColor(Color.RED);
254
-
255
- paint.setTextSize(100);
256
-
257
- canvas.drawText("答え"+cotae2str(Cotae, 6), 400, 170, paint);
258
-
259
- // 現在の状態の変更
260
-
261
- canvas.restore();
262
-
263
- }
264
-
265
- /** 青い四角を描画 */
266
-
267
- public void countUp() {
268
-
269
- score += 1;
270
-
271
- flag1=true;
272
-
273
- }
274
-
275
- /** 赤い文字を描画 */
276
-
277
- public void red() {
278
-
279
- ko += 1;
280
-
281
- flag2=true;
282
-
283
- }
284
-
285
-
286
-
287
- //ビットマップの読み込み
288
-
289
- private static Bitmap readBitmap(Context context, String name) {
290
-
291
- int resID = context.getResources().getIdentifier(
292
-
293
- name, "drawable", context.getPackageName());
294
-
295
- return BitmapFactory.decodeResource(
296
-
297
- context.getResources(), resID);
298
-
299
- }
300
-
301
- //数値→文字列
302
-
303
- private static String num2str(int num, int len) {
304
-
305
- String str = ""+num;
306
-
307
- while(str.length() < len) str = "0"+str;
308
-
309
- return str;
310
-
311
- }
312
-
313
- private static String coin2str(int num, int len) {
314
-
315
- String str = ""+num;
316
-
317
- while(str.length() < len) str = "0"+str;
318
-
319
- return str;
320
-
321
- }
322
-
323
- private static String cotae2str(double num, int len) {
324
-
325
- String str = ""+num;
326
-
327
- while(str.length() < len) str = "0"+str;
328
-
329
- return str;
330
-
331
- }
332
-
333
- }
334
-
335
- ```
336
-
337
- メインのActivityのSurfaceViewExとSurfaceExに分けてます。
338
-
339
- SurfaceViewとViewの2つを使っているtest2.xmlでSurfaceViewの画面に表示されている文字列を書き込み読み込みしたいのですが、どのようにしたらよいでしょうか?
340
-
341
- 一応、SurfaceViewExに書き込み用のsaveButtonClick() と読み込み用のloadButtonClick() 用意してます。
85
+ ちなみにこのSurfaceExクラスはサブでメインは別あります。メインでSharedPreferences指定なくはいけないのでしょうか?
342
-
343
- saveButtonClick() のボタンを押したらfinish()でアプリを終了し、起動の時にloadButtonClick() のボタンを押して読み込みができるようにしたいと思っています。

1

記入ミス

2016/06/05 22:31

投稿

19776340
19776340

スコア17

test CHANGED
File without changes
test CHANGED
@@ -104,7 +104,9 @@
104
104
 
105
105
  ```
106
106
 
107
+ ```
108
+
107
- ```public class SurfaceEx extends SurfaceView implements SurfaceHolder.Callback, Runnable {
109
+ public class SurfaceEx extends SurfaceView implements SurfaceHolder.Callback, Runnable {
108
110
 
109
111
 
110
112