У меня проблема с функцией, которую я пишу неправильно, и я не могу догадаться, как ее изменить - PullRequest
0 голосов
/ 26 января 2020

Я хотел бы создать функцию, которая будет вычислять число из одного столбца. Тогда я хотел бы одеть ее в текстовое представление. У меня есть база данных из комнаты и дао. Проблема в том, что я не могу вызвать функцию, потому что я делаю что-то не так. Кто-нибудь может мне помочь?

ПОМИАР:

package com.example.mwproto1.ROOM

import android.os.Parcel
import android.os.Parcelable
import androidx.room.ColumnInfo
import androidx.room.Entity
import androidx.room.PrimaryKey

@Entity
data class Pomiar(
    @ColumnInfo(name="Stezenie")
    val Stezenie: String?,
    @ColumnInfo(name="Data")
    val Data: String?,
    @ColumnInfo(name="Zegar")
    val Zegar: String?,
    @ColumnInfo(name="Posilek")
    val Posilek: String?
): Parcelable{
    @PrimaryKey(autoGenerate = true)
    var id :Int = 0

    constructor(parcel: Parcel) : this(
        parcel.readString(),
        parcel.readString(),
        parcel.readString(),
        parcel.readString()
    ) {
        id = parcel.readInt()
    }

    override fun writeToParcel(parcel: Parcel, flags: Int) {
        parcel.writeString(Stezenie)
        parcel.writeString(Data)
        parcel.writeString(Zegar)
        parcel.writeString(Posilek)
        parcel.writeInt(id)
    }

    override fun describeContents(): Int {
        return 0
    }

    companion object CREATOR : Parcelable.Creator<Pomiar> {
        override fun createFromParcel(parcel: Parcel): Pomiar {
            return Pomiar(parcel)
        }

        override fun newArray(size: Int): Array<Pomiar?> {
            return arrayOfNulls(size)
        }
    }
}

БАЗА ДАННЫХ:

package com.example.mwproto1.ROOM

import android.content.Context
import androidx.room.Database
import androidx.room.Room
import androidx.room.RoomDatabase

@Database(
    entities = arrayOf(Pomiar::class),
    version = 1
)
abstract class Database:RoomDatabase(){
    abstract fun getPomiarDao():PomiarDao

    companion object{
        @Volatile private var instance:com.example.mwproto1.ROOM.Database?=null
        private val LOCK = Any()

        operator fun invoke(context: Context)= instance?: synchronized(LOCK){
            instance ?: buildDatabase(context).also{ it ->
                instance = it
            }
        }
        private fun buildDatabase(context: Context) = Room.databaseBuilder(
            context.applicationContext,
            com.example.mwproto1.ROOM.Database::class.java,
            "pomiardatabase"
        ).build()

    }


}

Дао:

package com.example.mwproto1.ROOM

import androidx.room.*


@Dao
interface PomiarDao {

    @Insert
    suspend fun addPomiar(pomiar: Pomiar)

    @Query("SELECT * FROM pomiar ORDER BY id DESC")
    suspend fun getAllPomiar():List<Pomiar>

    @Insert
    suspend fun addMultiplePomiar(vararg pomiar: Pomiar)

    @Update
    suspend fun  updatePomiar(pomiar: Pomiar)

    @Delete
    suspend fun deletePomiar(pomiar: Pomiar )

    @Query("SELECT avg(Stezenie) FROM Pomiar ")
    suspend fun avg(pomiar: Pomiar)

}

Последний только мой средняя функция, что, к сожалению, плохо, я попробовал еще несколько способов, но ничего не вышло; .... ///

1 Ответ

0 голосов
/ 26 января 2020

В результате функция avg представляет собой число с плавающей запятой, если только усредненные значения ВСЕ не равны нулю, тогда вы хотите получить значение с плавающей запятой (или двойное число).

Поскольку ни один из переданных параметров не используется (и имя таблицы не может быть передано как параметр, так как имена не могут быть связаны).

Следующее должно работать с возвращаемым результатом : -

@Query("SELECT avg(Stezenie) FROM Pomiar ")
suspend fun avg(): Float
...