データベース(realm)を利用して試合結果記録アプリを作成しております。
一度作り、正常にアプリが起動することを確認したのちにデータベースの要素を追加しようと思った時です。
データベースの要素(変数)を1つ追加で宣言しただけ(利用していない)でコンパイルはできるがアプリが起動したとたんに終了するようになりました。
原因に心当たりのある方はいませんか?
Result.kt
package com.example.user1.myapplication5 import io.realm.RealmObject import io.realm.annotations.PrimaryKey import java.util.Date open class Result : RealmObject(){ @PrimaryKey var id: Long = 0 var title: Date = Date() var MyResult: String = "" var YourResult: String = "" var MyName: String = "" var YourName: String = "" var MySet: Int = 0 var YourSet: Int = 0 var MySet1: Int = 0 //追加した要素
参考までに他の部分のコードも載せておきます。
MainActivity.kt
package com.example.user1.myapplication5 import android.support.v7.app.AppCompatActivity import android.os.Bundle import io.realm.Realm import io.realm.kotlin.where import kotlinx.android.synthetic.main.activity_main.* import org.jetbrains.anko.startActivity class MainActivity : AppCompatActivity() { private lateinit var realm: Realm override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) realm = Realm.getDefaultInstance() listview.setOnItemClickListener{ parent, _, position, id -> val result = parent.getItemAtPosition(position) as Result startActivity<EditActivity>("result_id" to result.id) } val results = realm.where<Result>().findAll() listview.adapter = ResultAdapter(results) button.setOnClickListener { view -> startActivity<EditActivity>() } } override fun onDestroy() { super.onDestroy() realm.close() } }
EditActivity.kt
package com.example.user1.myapplication5 import android.annotation.SuppressLint import android.support.v7.app.AppCompatActivity import android.os.Bundle import io.realm.Realm import io.realm.kotlin.createObject import io.realm.kotlin.where import kotlinx.android.synthetic.main.activity_edit.* import org.jetbrains.anko.alert import org.jetbrains.anko.startActivity import org.jetbrains.anko.yesButton import java.text.ParseException import java.text.SimpleDateFormat import java.util.* class EditActivity : AppCompatActivity() { private lateinit var realm: Realm override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_edit) realm = Realm.getDefaultInstance() RETURN.setOnClickListener { view -> startActivity<MainActivity>() } val resultId = intent?.getLongExtra("result_id", -1L) if (resultId != -1L){ val result = realm.where<Result>().equalTo("id",resultId).findFirst() DateEdit.setText(android.text.format.DateFormat.format("yyyy/MM/dd",result?.title)) MyResultEdit.setText(result?.MyResult) YourResultEdit.setText(result?.YourResult) MyNameEdit.setText(result?.MyName) YourNameEdit.setText(result?.YourName) MySetEdit.setText(result?.MySet.toString()) YourSetEdit.setText(result?.YourSet.toString()) } DELETE.setOnClickListener{ realm.executeTransaction { realm.where<Result>().equalTo("id", resultId)?.findFirst()?.deleteFromRealm() } alert("削除しました"){ yesButton { finish() } }.show() } SAVE.setOnClickListener { when(resultId) { -1L -> { realm.executeTransaction { val maxId = realm.where<Result>().max("id") val nextId = (maxId?.toLong() ?: 0L) + 1 val result = realm.createObject<Result>(nextId) DateEdit.text.toString().toDate("yyyy/MM/dd")?.let { result.title = it } result.MyResult = MyResultEdit.text.toString() result.YourResult = YourResultEdit.text.toString() result.MyName = MyNameEdit.text.toString() result.YourName = YourNameEdit.text.toString() result.MySet = MySetEdit.text.toString().toInt() result.YourSet = YourSetEdit.text.toString().toInt() } alert("追加しました") { yesButton { finish() } }.show() } else -> { realm.executeTransaction{ val result = realm.where<Result>().equalTo("id", resultId).findFirst() DateEdit.text.toString().toDate("yyyy/MM/dd")?.let { result?.title = it } result?.MyResult = MyResultEdit.text.toString() result?.YourResult = YourResultEdit.text.toString() result?.MyName = MyNameEdit.text.toString() result?.YourName = YourNameEdit.text.toString() result?.MySet = MySetEdit.text.toString().toInt() result?.YourSet = YourSetEdit.text.toString().toInt() } alert ("追加しました"){ yesButton { finish() } }.show() } } } } override fun onDestroy() { super.onDestroy() realm.close() } @SuppressLint("SimpleDateFormat") private fun String.toDate(pattern: String = "yyyy/MM/dd HH:mm") : Date?{ val rtFormat = try { SimpleDateFormat(pattern) } catch (e: IllegalArgumentException){ null } val date = rtFormat?.let { try { it.parse(this) } catch (e: ParseException){ null } } return date } }
ResultAdapter
package com.example.user1.myapplication5 import android.content.Context import android.text.format.DateFormat import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.TextView import io.realm.OrderedRealmCollection import io.realm.RealmBaseAdapter open class ResultAdapter(data: OrderedRealmCollection<Result>?) : RealmBaseAdapter<Result>(data) { class ViewHolder(val dateView: TextView, val myresultView: TextView, val mysetView: TextView, val yoursetView: TextView, val mynameView: TextView, val yournameView: TextView) override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View? { var viewHolder : ViewHolder? var view = convertView if (view == null) { val inflater = LayoutInflater.from(parent?.context) view = inflater!!.inflate(R.layout.list_item, parent, false) viewHolder = ViewHolder( view.findViewById(R.id.DateText), view.findViewById(R.id.MyResultText), view.findViewById(R.id.MySetText), view.findViewById(R.id.YourSetText), view.findViewById(R.id.MyNameText), view.findViewById(R.id.YourNameText) ) view.tag = viewHolder } else { view = convertView viewHolder = view?.tag as ViewHolder } adapterData?.run { val listItem = getItem(position) viewHolder.dateView.text = DateFormat.format("yyyy/MM/dd" , listItem?.title) viewHolder.mynameView.text = listItem?.MyName viewHolder.yournameView.text = listItem?.YourName viewHolder.myresultView.text = listItem?.MyResult viewHolder.mysetView.text = listItem?.MySet.toString() viewHolder.yoursetView.text = listItem?.YourSet.toString() } return view } }
よろしくお願いします!!
あなたの回答
tips
プレビュー