“无法找到字段的设置器。- java.lang.String 中的值”错误,即使删除“is”并将类属性更改为 var

问题描述 投票:0回答:1

我正在为我一直在制作的应用程序创建一个 Room DB,每当我尝试运行我的代码时,我都会收到以下异常/错误:

Cannot find setter for field. - value in java.lang.String

由于错误消息含糊不清,我不知道问题的在哪里。

PixelArts Kotlin 类


import androidx.room.*
import java.time.LocalDateTime
import java.time.format.DateTimeFormatter

@Entity
data class PixelArts(
    @ColumnInfo(name = "item_bitmap") var bitmap: String,
    @ColumnInfo(name = "item_title") var title: String,
    @ColumnInfo(name = "item_pixel_data") var pixelData: String,
    @ColumnInfo(name = "item_favourited") var favourited: Boolean,
    @ColumnInfo(name = "item_date_created") var dateCreated: String = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss").format(LocalDateTime.now())) {
    @PrimaryKey(autoGenerate = true) var id = 0
}

PixelArtCreationsDao.kt

@Dao
interface PixelArtCreationsDao {
    @Insert
    suspend fun insertPixelArt(pixelArt: PixelArts)

    @Query("SELECT * FROM PixelArts ")
    fun getAllPixelArtCreations(): String

    @Query("DELETE FROM PixelArts WHERE id=:pixelArtId")
    fun deletePixelArtCreation(pixelArtId: Int)

    @Query("UPDATE PixelArts SET item_pixel_data=:pixelData AND item_bitmap=:bitmap WHERE id=:pixelArtId")
    fun updatePixelArtCreation(pixelArtId: Int, bitmap: String, pixelData: String)
}

AppData 类

class AppData {
    companion object {
        var dbFileName = "pixel_art_db"
        lateinit var db: PixelArtDatabase

        var pixelArtsData = mutableListOf<PixelArts>()

        fun initialize() {
            pixelArtsData.add(PixelArts(BitmapConverter.bitmapToString(Bitmap.createBitmap(10, 10, Bitmap.Config.ARGB_8888)), "Creation 1", JsonConverter.convertListOfViewToJsonString(listOf()), true))
        }
    }
}

onCreate方法

 override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setBindings()
        setOnClickListeners()
        setTitle()

        AppData.db = PixelArtDatabase.getDatabase(this)!!

        if (databaseFileExists()) {
            CoroutineScope(Dispatchers.IO).launch {
                AppData.pixelArtsData = AppData.db.pixelArtCreationsDao().getAllPixelArtCreations()

                withContext(Dispatchers.Main) {
                    binding.activityMainRecentCreationsRecyclerView.layoutManager = GridLayoutManager(this@MainActivity, 2)
                    binding.activityMainRecentCreationsRecyclerView.adapter = RecentCreationsAdapter(AppData.pixelArtsData, this@MainActivity)
                }
            }
        } else {
            AppData.initialize()
            binding.activityMainRecentCreationsRecyclerView.layoutManager = GridLayoutManager(this, 2)
            binding.activityMainRecentCreationsRecyclerView.adapter = RecentCreationsAdapter(AppData.pixelArtsData, this)

            CoroutineScope(Dispatchers.IO).launch {
                for (pixelArts in AppData.pixelArtsData) {
                    AppData.db.pixelArtCreationsDao().insertPixelArt(pixelArts)
                }
            }
        }
    }

转换器(也许这里有问题?)

object BitmapConverter {
    fun stringToBitmap(str: String): Bitmap? {
        return try {
            val byte: ByteArray = Base64.decode(str, Base64.DEFAULT)
            BitmapFactory.decodeByteArray(Base64.decode(str, Base64.DEFAULT), 0, byte.size)
        } catch (exception: Exception) {
            exception.printStackTrace()
            null
        }
    }

    fun bitmapToString(bitmap: Bitmap): String {
        val byteArrayOutputStream = ByteArrayOutputStream()
        bitmap.compress(Bitmap.CompressFormat.PNG, 100, byteArrayOutputStream)

        return Base64.encodeToString(byteArrayOutputStream.toByteArray(), Base64.DEFAULT)
    }
}
object JsonConverter {
    fun convertListOfViewToJsonString(list: List<View>) = Gson().toJson(list)
    fun convertJsonStringToListOfView(str: String) = Gson().fromJson(str, Array<View>::class.java).toList()
}

build.gradle

plugins {
    id 'com.android.application'
    id 'kotlin-android'
    id 'kotlin-kapt'
}

android {
    compileSdk 31

    testOptions {
        unitTests.includeAndroidResources = true
    }

    defaultConfig {
        applicationId "com.realtomjoney.pyxlmoose"
        minSdk 27
        targetSdk 31
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    kotlinOptions {
        jvmTarget = '1.8'
    }
    buildFeatures {
        viewBinding true
    }
    testOptions {
        unitTests.returnDefaultValues = true
    }
}

dependencies {
    implementation 'androidx.core:core-ktx:1.7.0'
    implementation 'androidx.appcompat:appcompat:1.4.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.1.2'
    implementation 'com.google.android.material:material:1.5.0-beta01'
    testImplementation 'junit:junit:4.13.2'
    testImplementation 'androidx.test:core-ktx:1.4.0'
    androidTestImplementation 'androidx.test.ext:junit-ktx:1.1.3'
    testImplementation 'org.robolectric:robolectric:4.4'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.0-alpha03'
    androidTestImplementation 'androidx.test:rules:1.4.1-alpha03'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-contrib:3.0.2'

    // ROOM
    implementation "androidx.room:room-runtime:2.3.0"
    implementation "androidx.room:room-ktx:2.3.0"
    kapt "androidx.room:room-compiler:2.3.0"

    // COROUTINE
    implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.0-RC'
    implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.0-RC'

    implementation 'com.google.code.gson:gson:2.8.6'
}

图片:

enter image description here

android sql sqlite kotlin android-room
1个回答
0
投票

其实上面问题的解决办法很简单,我也遇到了同样的问题,花了几个小时才找到答案。

 @Query("SELECT * FROM PixelArts ")
fun getAllPixelArtCreations(): String

在本部分中,getAllPixelArtCreations函数应该返回PixelArts对象,因为使用的查询是select * from....,但您指定的返回类型是String

@Query("SELECT * FROM PixelArts ")
fun getAllPixelArtCreations(): PixelArts

使用上面的代码应该可以解决“找不到设置器问题”。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.