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

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

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

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

Q&A

解決済

1回答

6993閲覧

エラーがなぜ起こっているのかが分かりません

myokiya

総合スコア8

Kotlin

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

0グッド

0クリップ

投稿2020/03/17 17:38

前提・実現したいこと

初心者なので本で作りながら勉強しているのですが、以下のコードにある2つの
finish()
の上のfinishはエラーが出て、下のfinish()はエラーが出ません。
エラーが起こっている原因は何でしょうか?
ご回答お願いいたします。

発生している問題・エラーメッセージ

Type mismatch: inferred type is Unit but Boolean was expected

該当のソースコード

package com.example.bloodpressure

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle

import android.view.View
import android.widget.Toast
import io.realm.Realm
import io.realm.kotlin.createObject
import io.realm.kotlin.where
import kotlinx.android.synthetic.main.activity_edit.*
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) realm = Realm.getDefaultInstance() val bpId = intent.getLongExtra("id", 0L) if (bpId > 0L) { val bloodPress = realm.where<BloodPress>() .equalTo("id", bpId).findFirst() maxEdit.setText(bloodPress?.max.toString()) minEdit.setText(bloodPress?.min.toString()) pulseEdit.setText(bloodPress?.pulse.toString()) deleteBtn.visibility = View.VISIBLE } else { deleteBtn.visibility = View.INVISIBLE } saveBtn.setOnLongClickListener { 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() } when (bpId) { 0L -> { 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.min = min bloodPress.pulse = pulse } } else -> { realm.executeTransaction { val bloodPress = realm.where<BloodPress>() .equalTo("id", bpId).findFirst() bloodPress?.max = max bloodPress?.min = min bloodPress?.pulse = pulse } } } Toast.makeText(applicationContext, "保存しました", Toast.LENGTH_SHORT).show() **finish()** } deleteBtn.setOnClickListener { realm.executeTransaction { val bloodPress = realm.where<BloodPress>() .equalTo("id", bpId) ?.findFirst() ?.deleteFromRealm() } Toast.makeText(applicationContext, "削除しました", Toast.LENGTH_SHORT).show() ** finish()** } } override fun onDestroy() { super.onDestroy() realm.close() }

}

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答1

0

ベストアンサー

結論から言うと、saveBtn.setOnLongClickListener を saveBtn.setOnClickListener に変更すれば良いのでは。

エラーの意味は、setOnLongClickListener に指定するラムダ式は Boolean の戻り値を期待してるのに Unit(戻り値なし)になってるので、true または false を返せばいいってことになりますが、そもそも saveBtn を長押ししないと反応しないのはおかしいと思うので。

Kotlin

1 saveBtn.setOnLongClickListener { 2 // 略 3 finish() 4 } 5 6 deleteBtn.setOnClickListener { 7 // 略 8 finish() 9 }

投稿2020/03/17 19:16

hoshi-takanori

総合スコア7895

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

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

myokiya

2020/03/18 13:02

出来ましたし、意味も分かりました… ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問