Ошибка Kotlin / Room: параметр, указанный как ненулевой, имеет значение null: метод kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull, сообщения параметров - PullRequest
0 голосов
/ 08 января 2019

Не уверен, что является причиной этого, но я пытаюсь запросить данные из API, который включает в себя массив Message объектов. Если я выведу результат на консоль, данные будут правильными, кроме Messages=null, когда я ожидаю, что Message будет массивом объектов. Я не могу понять, что я пропустил?

Я получаю эту ошибку: java.lang.IllegalArgumentException: Parameter specified as non-null is null: method kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull, parameter messages

Может ли кто-нибудь указать мне правильное направление? Код ниже для класса:

const val PROFILE_RESPONSE_ID = 0

@Entity(tableName = "profile")
data class ProfileResponse(
    val id: Int,
    val name: String,
    val code: String,
    val title: String,
    @SerializedName("profile_image")
    val profileImage: String,
    @SerializedName("background_image")
    val backgroundImage: String,
    @Embedded(prefix = "messages_")
    val messages: ArrayList<Messages>,
) {
    @PrimaryKey(autoGenerate = false)
    var responseId: Int = PROFILE_RESPONSE_ID
}

Образец JSON:

{
  "id": 44,
  "name": "Jason",
  "code": "jason",
  "title": "Jason Scott",
  "profile_image": "https://sampleurl.com/sample_profile.jpg",
  "background_image": "",
  "messages": [
    {
      "id": 0001,
      "message": "Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum.",
      "timestamp": "Thu, 01 Jan 1970 01:00:00 +0100",
    }
    {
      "id": 0002,
      "message": "Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum.",
      "timestamp": "Thu, 01 Jan 1970 01:00:00 +0100",
    }
    {
      "id": 0003,
      "message": "Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum.",
      "timestamp": "Thu, 01 Jan 1970 01:00:00 +0100",
    }
}

1 Ответ

0 голосов
/ 09 января 2019

Удалось решить эту проблему, удалив @Embedded, поскольку мне не обязательно были нужны данные в другой таблице, и добавили TypeConverter для преобразования списка в строку и обратно (этот вопрос помог). Для справки для всех остальных:

Класс TypeConvertor

class Convertors {

    @TypeConverter
    fun listToJson(value: List<Message>?): String {
        return Gson().toJson(value)
    }

    @TypeConverter
    fun jsonToList(value: String): List<Message>? {
        val objects = Gson().fromJson(value, Array<Message>::class.java) as Array<Message>
        val list = objects.toList()
        return list
    }

}

Затем добавьте @TypeConverters в мой класс базы данных.

База данных класса

@Database(entities = [ProfileResponse::class], version = 1)
@TypeConverters(Convertors::class)
abstract class MainDatabase: RoomDatabase() {

    abstract fun profileResponseDao(): ProfileResponseDao

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...