回答編集履歴

4

サンプル修正

2020/08/15 05:28

投稿

keicha_hrs
keicha_hrs

スコア6768

test CHANGED
@@ -130,11 +130,11 @@
130
130
 
131
131
  // 読み込み
132
132
 
133
- val name = prefs.getString("NAME", null) // 名前
133
+ val name = prefs.getString("NAME", "") // 名前
134
-
134
+
135
- val subject = prefs.getString("SUBJECT", null) // 科目
135
+ val subject = prefs.getString("SUBJECT", "") // 科目
136
-
136
+
137
- val room = prefs.getString("ROOM", null) // 受講部屋
137
+ val room = prefs.getString("ROOM", "") // 受講部屋
138
138
 
139
139
  val times = prefs.getInt("TIMES", 0) // 回数
140
140
 
@@ -238,7 +238,7 @@
238
238
 
239
239
  var name: String?
240
240
 
241
- get() = prefs.getString("NAME", null)
241
+ get() = prefs.getString("NAME", "")
242
242
 
243
243
  set(value) = prefs.edit().putString("NAME", value).apply()
244
244
 
@@ -246,7 +246,7 @@
246
246
 
247
247
  var subject: String?
248
248
 
249
- get() = prefs.getString("SUBJECT", null)
249
+ get() = prefs.getString("SUBJECT", "")
250
250
 
251
251
  set(value) = prefs.edit().putString("SUBJECT", value).apply()
252
252
 
@@ -254,7 +254,7 @@
254
254
 
255
255
  var room: String?
256
256
 
257
- get() = prefs.getString("ROOM", null)
257
+ get() = prefs.getString("ROOM", "")
258
258
 
259
259
  set(value) = prefs.edit().putString("ROOM", value).apply()
260
260
 
@@ -307,3 +307,11 @@
307
307
 
308
308
 
309
309
  (参考)[SharedPreferences を使ったデータアクセス部分を Kotlin のカスタムアクセサ で実装する | Y.A.M の 雑記帳](http://y-anz-m.blogspot.com/2017/09/sharedpreferences-kotlin.html)
310
+
311
+
312
+
313
+ ---
314
+
315
+
316
+
317
+ (8/15 14:27)サンプルを少し修正しました。デフォルト値はnullではない方がいいですね。

3

出典追記

2020/08/15 05:27

投稿

keicha_hrs
keicha_hrs

スコア6768

test CHANGED
@@ -302,4 +302,8 @@
302
302
 
303
303
 
304
304
 
305
- のようにして使えます。MainActivityでもaddsubjectでも任意の箇所で利用可能でしょう。これならば、PreferenceManagerへのアクセスの記述一箇所にまとまるので、読みやすくもなるでしょう。
305
+ のようにして使えます。MainActivityでもaddsubjectでも任意の箇所で利用可能でしょう。これならば、SharedPreferencesへのアクセスの記述一箇所にまとまるので、読みやすくもなるでしょう。
306
+
307
+
308
+
309
+ (参考)[SharedPreferences を使ったデータアクセス部分を Kotlin のカスタムアクセサ で実装する | Y.A.M の 雑記帳](http://y-anz-m.blogspot.com/2017/09/sharedpreferences-kotlin.html)

2

おまけ

2020/08/14 16:23

投稿

keicha_hrs
keicha_hrs

スコア6768

test CHANGED
@@ -207,3 +207,99 @@
207
207
  ```
208
208
 
209
209
  というimport文を追加してください。
210
+
211
+
212
+
213
+ ---
214
+
215
+
216
+
217
+ SharedPreferencesへのアクセス用クラスのサンプルです。LessonData.ktとでもファイルを新規作成して、
218
+
219
+
220
+
221
+ ```kotlin
222
+
223
+ package <自分のパッケージ名>
224
+
225
+
226
+
227
+ import android.content.Context
228
+
229
+ import androidx.preference.PreferenceManager
230
+
231
+
232
+
233
+ class LessonData(context: Context) {
234
+
235
+ private val prefs = PreferenceManager.getDefaultSharedPreferences(context)
236
+
237
+
238
+
239
+ var name: String?
240
+
241
+ get() = prefs.getString("NAME", null)
242
+
243
+ set(value) = prefs.edit().putString("NAME", value).apply()
244
+
245
+
246
+
247
+ var subject: String?
248
+
249
+ get() = prefs.getString("SUBJECT", null)
250
+
251
+ set(value) = prefs.edit().putString("SUBJECT", value).apply()
252
+
253
+
254
+
255
+ var room: String?
256
+
257
+ get() = prefs.getString("ROOM", null)
258
+
259
+ set(value) = prefs.edit().putString("ROOM", value).apply()
260
+
261
+ }
262
+
263
+ ```
264
+
265
+
266
+
267
+ こんな感じで作ればいいのではないでしょうか。他にも要素が必要なら、同じ要領で追加していけば良いです。
268
+
269
+
270
+
271
+ 使い方としては、
272
+
273
+
274
+
275
+ 読み込み
276
+
277
+ ```kotlin
278
+
279
+ val lesson = LessonData(this)
280
+
281
+ val name = lesson.name
282
+
283
+ val subject = lesson.subject
284
+
285
+ val room = lesson.room
286
+
287
+ ```
288
+
289
+ 書き込み
290
+
291
+ ```kotlin
292
+
293
+ val lesson = LessonData(this)
294
+
295
+ lesson.name = "書き込みたいデータ"
296
+
297
+ lesson.subject = "書き込みたいデータ"
298
+
299
+ lesson.room = "書き込みたいデータ"
300
+
301
+ ```
302
+
303
+
304
+
305
+ のようにして使えます。MainActivityでもaddsubjectでも任意の箇所で利用可能でしょう。これならば、PreferenceManagerへのアクセスの記述は一箇所にまとまるので、読みやすくもなるでしょう。

1

SharedPreferencesについて追記

2020/08/14 16:20

投稿

keicha_hrs
keicha_hrs

スコア6768

test CHANGED
@@ -107,3 +107,103 @@
107
107
 
108
108
 
109
109
  subjectNameは恐らくEditTextではないかと思ったので上記のように記しています。EditTextへの入力をString型で得るには、toString()も呼び出す必要があります。
110
+
111
+
112
+
113
+ ---
114
+
115
+
116
+
117
+ 少量の情報を端末内に保存するには、SharedPreferencesを用いるのが簡単でしょう。
118
+
119
+
120
+
121
+ 使い方のサンプルとしては、
122
+
123
+
124
+
125
+ ```kotlin
126
+
127
+ val prefs = PreferenceManager.getDefaultSharedPreferences(this)
128
+
129
+
130
+
131
+ // 読み込み
132
+
133
+ val name = prefs.getString("NAME", null) // 名前
134
+
135
+ val subject = prefs.getString("SUBJECT", null) // 科目
136
+
137
+ val room = prefs.getString("ROOM", null) // 受講部屋
138
+
139
+ val times = prefs.getInt("TIMES", 0) // 回数
140
+
141
+ val enable = prefs.getBoolean("ENABLE", false) // 可否
142
+
143
+
144
+
145
+ // 書き込み
146
+
147
+ val editor = prefs.edit()
148
+
149
+ editor.putString("NAME", name)
150
+
151
+ editor.putString("SUBJECT", subject)
152
+
153
+ editor.putString("ROOM", room)
154
+
155
+ editor.putInt("TIMES", times)
156
+
157
+ editor.putBoolean("ENABLE", enable)
158
+
159
+ editor.apply() // 最後にapply()を呼び出す
160
+
161
+ ```
162
+
163
+
164
+
165
+ このような感じになります。getInt()/putInt()、getBoolean()/putBoolean()はおまけで使用例だけ示しましたが、他にもputLong()/getLong()、putFloat()/getFloat()などもあります。
166
+
167
+
168
+
169
+ get系の関数は、第1引数がキー名、第2引数がそのキー名に対応するデータが無かったときの初期値です。
170
+
171
+ put系の関数は、第1引数がキー名、第2引数が書き込みたいデータです。
172
+
173
+
174
+
175
+ キー名の対応(特に大文字小文字の違いなど)を間違えないようにしましょう。
176
+
177
+
178
+
179
+ なお、従来のPreferenceManagerがAPIレベル29で非推奨になっているため、そのまま記述すると取り消し線が引かれてしまうかもしれません。それに対応するために、build.gradle(:app)のdependenciesブロックに
180
+
181
+
182
+
183
+ ```gradle
184
+
185
+ dependencies {
186
+
187
+ (中略)
188
+
189
+ implementation 'androidx.preference:preference:1.1.1'
190
+
191
+ }
192
+
193
+ ```
194
+
195
+
196
+
197
+ という記述を追加して、PreferenceManagerを用いるクラスでは
198
+
199
+
200
+
201
+ ```kotlin
202
+
203
+ //import android.preference.PreferenceManager // これは消す
204
+
205
+ import androidx.preference.PreferenceManager // これを追加
206
+
207
+ ```
208
+
209
+ というimport文を追加してください。