前提
書籍でkotlinの学習中。
Realmでデータを保存する等の処理をしたい
実現したいこと
エミュレータクラッシュするので、改善したい
発生している問題・エラーメッセージ
realm= Realm.getDefaultInstance() を記述するとエミュレータがクラッシュする。 (消すと、一応正常に起動する)
該当のソースコード
EditActivity.kt
package com.example.samplerealm import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.widget.Button import android.widget.EditText import android.widget.Toast import io.realm.Realm import io.realm.kotlin.createObject import io.realm.kotlin.where import java.util.* class EditActivity : AppCompatActivity() { private val tag = "BloodPressure" private lateinit var realm:Realm override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_edit) val maxEdit:EditText= findViewById(R.id.maxEdit) val minEdit:EditText= findViewById(R.id.minEdit) val pulseEdit: EditText =findViewById(R.id.pulseEdit) val btnSave:Button = findViewById(R.id.btnSave) val btnDelete: Button =findViewById(R.id.btnDelete) realm= Realm.getDefaultInstance()//(※クラッシュ) btnSave.setOnClickListener { var max:Long =0 var min:Long =0 var pulse:Long =0 if(!maxEdit.text.isNullOrEmpty()){ max = maxEdit.text.toString().toLong() } if(!minEdit.text.isNullOrEmpty()){ min = minEdit.text.toString().toLong() } if(pulseEdit.text.isNullOrEmpty()){ pulse=pulseEdit.text.toString().toLong() } realm.executeTransaction{ val maxId = realm.where<BloodPress>().max("id") val nextId =(maxId?.toLong()?:0L)+1L val bloodPress =realm.createObject<BloodPress>(nextId) bloodPress.dateTime = Date() bloodPress.max = max bloodPress.mim = min bloodPress.pulse = pulse } Toast.makeText(applicationContext,"保存しました",Toast.LENGTH_LONG).show() finish() } } override fun onDestroy() { super.onDestroy() realm.close() } }
試したこと
realm= Realm.getDefaultInstance()
の一文を消すと、エミュレータは正常に起動する。
ただし、realm= Realm.getDefaultInstance()を消していいのか、
あるいは(書籍が古いため)別の書き方にしないといけないのか、判断できないため質問させていただきました。
補足情報(FW/ツールのバージョンなど)
AndroidStudio Chipmunk | 2021.2.1
まだ回答がついていません
会員登録して回答してみよう