teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

2

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

2016/06/05 22:31

投稿

19776340
19776340

スコア17

title CHANGED
@@ -1,1 +1,1 @@
1
- 画像内の表示書き込み、読み込みするにはどうしらよいでしょか?
1
+ AndroidプログラミングでSharedPreferencesゲットするためのgetSharedPreferencesを使とエラーが出ます。
body CHANGED
@@ -1,172 +1,43 @@
1
1
  ```ここに言語を入力
2
- public class SurfaceViewEx extends Activity {
3
- SharedPreferences pref;
4
- SurfaceEx surface;
5
-
6
- OnClickListener listener = new OnClickListener() {
7
- @Override
8
- public void onClick(View v) {
9
- switch(v.getId()) {
10
- case R.id.blue_box: // 青い四角を描画
11
- surface.countUp();
12
- break;
13
- case R.id.red_char: // 赤い文字を描画
14
- surface.red();
15
- break;
16
- case R.id.finish_char:
17
- saveButtonClick();
18
- break;
19
- case R.id.LoadButton:
20
- loadButtonClick();
21
- break;
22
- }
23
- }
24
- };
25
-
26
- @Override
27
- public void onCreate(Bundle savedInstanceState) {
28
- super.onCreate(savedInstanceState);
29
- setContentView(R.layout.test2);
30
- surface = (SurfaceEx)findViewById(R.id.sv_main);
31
- pref = PreferenceManager.getDefaultSharedPreferences(this);
32
- // リスナーの設定
33
- findViewById(R.id.blue_box).setOnClickListener(listener);
34
- findViewById(R.id.red_char).setOnClickListener(listener);
35
- findViewById(R.id.finish_char).setOnClickListener(listener);
36
- findViewById(R.id.LoadButton).setOnClickListener(listener);
37
- }
38
- private void saveButtonClick() {
39
- // 書き込み
40
- finish();
41
- }
42
- private void loadButtonClick() {
43
- //読み込み
44
-
45
- }
46
-
47
- @Override
48
- public void onPause() {
49
- super.onPause();
50
- surface.surfaceDestroyed(null);
51
- }
52
- }
53
- ```
54
- ```
55
2
  public class SurfaceEx extends SurfaceView implements SurfaceHolder.Callback, Runnable {
56
-
57
- private int score; // 個数1
58
- private int ko; // 個数2
3
+ /** コンストラクタ */
59
- private double Cotae; // 個数2÷個数1=
4
+ public SurfaceEx(Context context, AttributeSet attr) {
60
- private Thread thread;
5
+ super(context, attr);
6
+ // SurfaceHolder の取得
61
- private boolean flag1 = true;
7
+ SurfaceHolder holder = getHolder();
8
+ // SurfaceHolder に コールバックを設定
9
+ holder.addCallback(this);
10
+ holder.setFixedSize(getWidth(), getHeight());
11
+ @Override
12
+ public void run() {
13
+ while (true && thread != null) {
14
+ // ホルダーからキャンバスの取得
15
+ Canvas canvas = getHolder().lockCanvas();
16
+ // 描画処理
17
+ draw(canvas);
18
+ // 描画内容の確定
19
+ getHolder().unlockCanvasAndPost(canvas);
20
+ }
21
+ }
22
+ /** 描画処理 */
23
+ @Override
24
+ public void draw(Canvas canvas) {
25
+ super.draw(canvas);
62
- private boolean flag2 = true;
26
+ Paint paint = new Paint();
27
+ // 現在の状態を保存
28
+ canvas.save();
29
+ // Canvasの背景色を白で塗る
30
+ canvas.drawColor(Color.WHITE);
63
31
 
64
- /** コンストラクタ */
65
- public SurfaceEx(Context context, AttributeSet attr) {
32
+ SharedPreferences pref = getSharedPreferences("pref", MODE_PRIVATE);
66
- super(context, attr);
67
- // SurfaceHolder の取得
68
- SurfaceHolder holder = getHolder();
33
+ SharedPreferences.Editor editor = pref.edit();
69
- // SurfaceHolder に コールバックを設定
70
- holder.addCallback(this);
71
- holder.setFixedSize(getWidth(), getHeight());
34
+ editor.putInt("count", score);
72
- // フォーカスをあてる
73
- setFocusable(true);
35
+ editor.commit();
74
- }
36
+ }
75
-
76
- @Override
77
- public void surfaceCreated(SurfaceHolder holder) {
78
- thread = new Thread(this);
79
- thread.start();
80
- }
81
-
82
- @Override
83
- public void surfaceDestroyed(SurfaceHolder holder) {
84
- thread = null;
85
- }
86
-
87
- @Override
88
- public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {
89
- // TODO 自動生成されたメソッド・スタブ
90
- }
91
-
92
- @Override
93
- public void run() {
94
- while (true && thread != null) {
95
- // ホルダーからキャンバスの取得
96
- Canvas canvas = getHolder().lockCanvas();
97
- // 描画処理
98
- draw(canvas);
99
- // 描画内容の確定
100
- getHolder().unlockCanvasAndPost(canvas);
101
- }
102
- }
103
- /** 描画処理 */
104
- @Override
105
- public void draw(Canvas canvas) {
106
- super.draw(canvas);
107
- Paint paint = new Paint();
108
- // 現在の状態を保存
109
- canvas.save();
110
- // Canvasの背景色を白で塗る
111
- canvas.drawColor(Color.WHITE);
112
-
113
- if(flag1 == true) {
114
- paint.setColor(Color.GREEN);
115
- paint.setTextSize(50);
116
- canvas.drawText("回転数"+num2str(score,0), 10, 70, paint);
117
- }
118
- if(flag2 == true) {
119
- //メダルの表示
120
- paint.setColor(Color.BLUE);
121
- paint.setTextSize(50);
122
- canvas.drawText("COIN"+coin2str(ko,6), 500, 70, paint);
123
- }
124
-
125
- double val1 = ((double) ko / score)*100;
126
- Cotae = val1;
127
- paint.setColor(Color.RED);
128
- paint.setTextSize(100);
129
- canvas.drawText("答え"+cotae2str(Cotae, 6), 400, 170, paint);
130
- // 現在の状態の変更
131
- canvas.restore();
132
- }
133
- /** 青い四角を描画 */
134
- public void countUp() {
135
- score += 1;
136
- flag1=true;
137
- }
138
- /** 赤い文字を描画 */
139
- public void red() {
140
- ko += 1;
141
- flag2=true;
142
- }
143
-
144
- //ビットマップの読み込み
145
- private static Bitmap readBitmap(Context context, String name) {
146
- int resID = context.getResources().getIdentifier(
147
- name, "drawable", context.getPackageName());
148
- return BitmapFactory.decodeResource(
149
- context.getResources(), resID);
150
- }
151
- //数値→文字列
152
- private static String num2str(int num, int len) {
153
- String str = ""+num;
154
- while(str.length() < len) str = "0"+str;
155
- return str;
156
- }
157
- private static String coin2str(int num, int len) {
158
- String str = ""+num;
159
- while(str.length() < len) str = "0"+str;
160
- return str;
161
- }
162
- private static String cotae2str(double num, int len) {
163
- String str = ""+num;
164
- while(str.length() < len) str = "0"+str;
165
- return str;
166
- }
167
- }
168
37
  ```
169
- メインActivitySurfaceViewExSurfaceEx分けてます。
38
+ 質問を編集しました。省略してますが、SharedPreferences のとこのgetSharedPreferencesとMODE_PRIVATEが赤字なりエラーが出ます。
170
- SurfaceViewとViewの2つを使っているtest2.xmlSurfaceView画面表示されてい文字列を書き込み読み込みいのですがどのようにしたらよいでしょうか?
39
+ それ調べたらrun()記入すとエラーが出るからgetSharedPreferencesの主たるContextrun()の外部にけば良いらしいので、
40
+ /コンストラクタ/内にContext mAppContext;と記入してSharedPreferences pref = mAppContext.getSharedPreferences("pref", mAppContext.MODE_PRIVATE);
41
+ と記入したら赤字エラーは出なくなりましたが、実機で起動させて終了して閉じたらスマホ画面に「問題が発生したため「アプリ」を終了します」とでて、それ以降立ち上げようとするとこの画面が出てエラーになります。
42
+ SharedPreferencesを使用するにはどのようにしたらよいでしょうか?
171
- 一応、SurfaceViewExに書き込saveButtonClick() と読み込み用のloadButtonClick() を用意してます。
43
+ ちなにこSurfaceExクラスはサブでメインは別にあります。メインでSharedPreferencesを指定しなくてはいけないのでしょうか?
172
- saveButtonClick() のボタンを押したらfinish()でアプリを終了し、起動の時にloadButtonClick() のボタンを押して読み込みができるようにしたいと思っています。

1

記入ミス

2016/06/05 22:31

投稿

19776340
19776340

スコア17

title CHANGED
File without changes
body CHANGED
@@ -51,7 +51,8 @@
51
51
  }
52
52
  }
53
53
  ```
54
+ ```
54
- ```public class SurfaceEx extends SurfaceView implements SurfaceHolder.Callback, Runnable {
55
+ public class SurfaceEx extends SurfaceView implements SurfaceHolder.Callback, Runnable {
55
56
 
56
57
  private int score; // 個数1
57
58
  private int ko; // 個数2