0

I would like to create a function that will calculate a number from one column. Then I'd like to dress her in a textview. I have a database from room and dao. The problem is that I can't call the function because I am doing something wrong. Can anyone help me?

POMIAR :

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)
        }
    }
}

DATABASE:

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()

    }


}

Dao:

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)

}

The last one is just my average function, which unfortunately is bad I tried a few more ways but nothing comes out; .... ///

majurageerthan
  • 2,169
  • 3
  • 17
  • 30
Patser
  • 21
  • 1
  • 1
  • 4

1 Answers1

0

As the result of the avg function is a float unless ALL values being averaged are null then you want to get a Float (or Double).

As there is no use made of any parameter passed (nor could the table name be passed as a parameter as names cannot be bound).

The following should then work with the result being returned :-

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