質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Realm

RealmとはSQLiteやCore Dataに代わるモバイルデータベースです。iOSとAndroidの両方でサポートされています。

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

Q&A

0回答

288閲覧

データベースの要素を1つ追加しただけで、アプリが動かなくなりました、、、

akawo

総合スコア23

Realm

RealmとはSQLiteやCore Dataに代わるモバイルデータベースです。iOSとAndroidの両方でサポートされています。

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

0グッド

0クリップ

投稿2018/06/27 14:31

データベース(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 } }

よろしくお願いします!!

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/06/27 14:53

マイグレーションは行いましたか?
akawo

2018/06/27 22:28

行なっていないです!migrationについて調べて対応してみます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問