質問編集履歴

3

説明文補足

2020/07/08 09:00

投稿

tege
tege

スコア29

test CHANGED
File without changes
test CHANGED
@@ -1,6 +1,22 @@
1
1
  Realmでflagカラムを追加を行ったのですが、下記のエラーが出てしまいます。
2
2
 
3
- 解決策はないでしょうか?
3
+ deleteIfMigrationNeeded()というメソッドで一度realmを削除してくれる事がわったのですが、どこに記載すればいいのかわかりません。どたか教えてただきたいす。
4
+
5
+
6
+
7
+ ```
8
+
9
+ E/AndroidRuntime: FATAL EXCEPTION: main
10
+
11
+ Process: com.example.myscheduler, PID: 32178
12
+
13
+ java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.myscheduler/com.example.myscheduler.MainActivity}: io.realm.exceptions.RealmMigrationNeededException: Migration is required due to the following errors:
14
+
15
+ - Property 'Schedule.flag' has been added.
16
+
17
+ ```
18
+
19
+
4
20
 
5
21
  ```
6
22
 
@@ -29,20 +45,6 @@
29
45
  var flag: Long = 0
30
46
 
31
47
  }
32
-
33
- ```
34
-
35
-
36
-
37
- ```
38
-
39
- E/AndroidRuntime: FATAL EXCEPTION: main
40
-
41
- Process: com.example.myscheduler, PID: 32178
42
-
43
- java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.myscheduler/com.example.myscheduler.MainActivity}: io.realm.exceptions.RealmMigrationNeededException: Migration is required due to the following errors:
44
-
45
- - Property 'Schedule.flag' has been added.
46
48
 
47
49
  ```
48
50
 
@@ -113,33 +115,3 @@
113
115
 
114
116
 
115
117
  ```
116
-
117
-
118
-
119
- ``` kotlin
120
-
121
- package com.example.myscheduler
122
-
123
-
124
-
125
- import android.app.Application
126
-
127
- import io.realm.Realm
128
-
129
-
130
-
131
- class MySchedulerApplication : Application() {
132
-
133
- override fun onCreate() {
134
-
135
- super.onCreate()
136
-
137
- Realm.init(this)
138
-
139
- }
140
-
141
- }
142
-
143
- コード
144
-
145
- ```

2

質問の変更

2020/07/08 09:00

投稿

tege
tege

スコア29

test CHANGED
@@ -1 +1 @@
1
- 完了ボタンが押された時該当するIDのデータの色を変
1
+ Realmでカラムを変更し際にエラーがでます
test CHANGED
@@ -1,92 +1,98 @@
1
- 完了ボタンが押された場合現在表示されているデータに該当するIDのデータの色を変更したいのですが、Realmflagを用意して0完了前。1完了とったようにるべきでしょうか?
1
+ Realmflagカラム追加を行ったのです、下記のエラー出てしま
2
+
3
+ 何か解決策はないでしょうか?
4
+
5
+ ```
2
6
 
3
7
 
4
8
 
5
- ```表示画面
9
+ import io.realm.RealmObject
6
10
 
7
- import android.text.format.DateFormat
11
+ import io.realm.annotations.PrimaryKey
8
12
 
9
- import android.view.LayoutInflater
10
-
11
- import android.view.View
13
+ import java.util.*
12
-
13
- import android.view.ViewGroup
14
-
15
- import android.widget.TextView
16
-
17
- import androidx.recyclerview.widget.RecyclerView
18
-
19
- import io.realm.OrderedRealmCollection
20
-
21
- import io.realm.RealmRecyclerViewAdapter
22
14
 
23
15
 
24
16
 
25
- class ScheduleAdapter(data: OrderedRealmCollection<Schedule>) :
17
+ open class Schedule : RealmObject() {
26
18
 
19
+ @PrimaryKey
20
+
21
+ var id: Long = 0
22
+
23
+ var date: Date = Date()
24
+
25
+ var title: String = ""
26
+
27
- RealmRecyclerViewAdapter<Schedule, ScheduleAdapter.ViewHolder>(data, true) {
27
+ var detail: String = ""
28
+
29
+ var flag: Long = 0
30
+
31
+ }
32
+
33
+ ```
28
34
 
29
35
 
30
36
 
31
- private var listener: ((Long?) -> Unit)? = null
37
+ ```
32
38
 
33
- fun setOnItemClickListener(listener: (Long?) -> Unit) {
39
+ E/AndroidRuntime: FATAL EXCEPTION: main
34
40
 
35
- this.listener = listener
41
+ Process: com.example.myscheduler, PID: 32178
36
42
 
37
- }
43
+ java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.myscheduler/com.example.myscheduler.MainActivity}: io.realm.exceptions.RealmMigrationNeededException: Migration is required due to the following errors:
44
+
45
+ - Property 'Schedule.flag' has been added.
46
+
47
+ ```
38
48
 
39
49
 
40
50
 
41
- init {
51
+ ```kotlin
42
52
 
43
- setHasStableIds(true)
53
+ //////////RecyclerViewにレイアウトマネージャーとアダプタを設定する/////////////
44
54
 
45
- }
55
+ class MainActivity : AppCompatActivity() {
56
+
57
+ private lateinit var realm: Realm //Realmクラスのプロパティを用意
46
58
 
47
59
 
48
60
 
49
- class ViewHolder(cell: View) : RecyclerView.ViewHolder(cell) { //RecylerViewを継承
61
+ override fun onCreate(savedInstanceState: Bundle?) {
50
62
 
51
- val date: TextView = cell.findViewById(android.R.id.text1)
63
+ super.onCreate(savedInstanceState)
52
64
 
53
- val title: TextView = cell.findViewById(android.R.id.text2)
65
+ setContentView(R.layout.activity_main)
54
66
 
67
+ setSupportActionBar(toolbar)
68
+
69
+ realm = Realm.getDefaultInstance() //Realmクラスのインスタンスを取得
70
+
71
+ list.layoutManager = LinearLayoutManager(this)
72
+
73
+ val schedules = realm.where<Schedule>().sort("date",Sort.DESCENDING).findAll() //findAllで全てのスケジュールを取得。変数に格納
74
+
75
+ val adapter = ScheduleAdapter(schedules)
76
+
55
- }
77
+ list.adapter = adapter
56
78
 
57
79
 
58
80
 
59
- override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ScheduleAdapter.ViewHolder {
81
+ fab.setOnClickListener { view ->
60
82
 
61
- val infrater = LayoutInflater.from(parent.context) //インスタンス生成
83
+ val intent = Intent(this, ScheduleEditActivity::class.java)
62
84
 
63
- val view = infrater.inflate( //ビューにレイアウトXMLを適用
85
+ startActivity(intent)
64
86
 
65
- android.R.layout.simple_list_item_2,
87
+ }
66
88
 
67
- parent, false
89
+ adapter.setOnItemClickListener { id ->
68
90
 
69
- )
91
+ val intent = Intent(this, ScheduleEditActivity::class.java)
70
92
 
71
- return ViewHolder(view)
93
+ .putExtra("schedule_id", id)
72
94
 
73
- }
74
-
75
-
76
-
77
- ////////////////////////// //データを取り出し表示させるための処理/////////////
78
-
79
- override fun onBindViewHolder(holder: ScheduleAdapter.ViewHolder, position: Int) {
80
-
81
- val schedule: Schedule? = getItem(position)
82
-
83
- holder.date.text = DateFormat.format("yyyy/MM/dd", schedule?.date)
84
-
85
- holder.title.text = schedule?.title
86
-
87
- holder.itemView.setOnClickListener {
88
-
89
- listener?.invoke(schedule?.id)
95
+ startActivity(intent)
90
96
 
91
97
  }
92
98
 
@@ -94,42 +100,46 @@
94
100
 
95
101
 
96
102
 
97
- override fun getItemId(position: Int): Long { //getItemIdをオーバーライド
103
+ override fun onDestroy() {
98
104
 
99
- return getItem(position)?.id ?: 0
105
+ super.onDestroy()
106
+
107
+ realm.close()
100
108
 
101
109
  }
102
110
 
103
111
  }
104
112
 
113
+
114
+
105
115
  ```
106
116
 
107
117
 
108
118
 
109
- ```
119
+ ``` kotlin
110
120
 
111
- /////////////完了ボタンが押された場合///////////////////////////
112
-
113
- comp.setOnClickListener { view: View ->
114
-
115
- realm.executeTransaction { db: Realm ->
116
-
117
- db.where<Schedule>().equalTo("id", scheduleId)
118
-
119
- }
120
-
121
- ///////////////////////////スナックバー//////////////////////////
122
-
123
- Snackbar.make(view, "完了しました", Snackbar.LENGTH_INDEFINITE)
124
-
125
- .setAction("戻る") { finish() }
126
-
127
- .setActionTextColor(Color.YELLOW)
121
+ package com.example.myscheduler
128
-
129
- .show()
130
-
131
- }
132
122
 
133
123
 
134
124
 
125
+ import android.app.Application
126
+
127
+ import io.realm.Realm
128
+
129
+
130
+
131
+ class MySchedulerApplication : Application() {
132
+
133
+ override fun onCreate() {
134
+
135
+ super.onCreate()
136
+
137
+ Realm.init(this)
138
+
139
+ }
140
+
141
+ }
142
+
143
+ コード
144
+
135
145
  ```

1

誤字の修正

2020/07/08 07:22

投稿

tege
tege

スコア29

test CHANGED
File without changes
test CHANGED
@@ -1,4 +1,4 @@
1
- 完了ボタンが押された場合現在表示されているデータに該当するIDのデータの色を変更したいのですが、Realmにflagを用意して0が完了前。1が完了といったようにするやるべきでしょうか?
1
+ 完了ボタンが押された場合現在表示されているデータに該当するIDのデータの色を変更したいのですが、Realmにflagを用意して0が完了前。1が完了といったようにするべきでしょうか?
2
2
 
3
3
 
4
4