【问题标题】:how to fetch data from room Database kotlin如何从房间数据库kotlin中获取数据
【发布时间】:2022-01-22 15:44:47
【问题描述】:

我是 RoomDatabse 的新手。我必须在离线模式下从 Room 数据库中获取数据。 这是代码

json

[
 {"id": 1,
  "name": "Hero",
  "image": "https://upload.wikimedia.org/wikipedia/commons/4/41/Sunflower_from_Silesia2.jpg",
  "age": "23"}
]

这是模型

class Actor() : ArrayList<ActorItem>()
@Entity(tableName = "actor",indices = arrayOf(Index(value= arrayOf("id"),unique = true)))
data class ActorItem(

    @PrimaryKey(autoGenerate = true)
    val id_:Int,
    @SerializedName("age")
    @ColumnInfo(name = "age")
    val age: String,
    @SerializedName("id")
    @ColumnInfo(name = "id")
    val id: Int,
    @SerializedName("image")
    @ColumnInfo(name="image")
    val image: String,
    @SerializedName("name")
    @ColumnInfo(name = "name")
    val name: String
)

存储库类


class ReposetoryHelper(
    private val actorApi: ActorApi,
    private val databaseHelper: DatabaseHelper,
    private val applicationContext: Context)
{
    private val actorData = MutableLiveData<Actor>()
    val actors : LiveData<Actor>
    get() = actorData

    suspend fun getActor(){
        if(NetworkUtil.isInternetAvailable(applicationContext)){
            //fatch data from API while Online
            val result_ = actorApi.getActor()
            if (result_.body()!=null){
                databaseHelper.actorDao().addActor(result_.body()!!)
                actorData.postValue(result_.body())
            }
        }else{
                //fatch data from Database while Offline
            }
        }
    }

道类

@Dao
interface ActorDao {

    @Insert(onConflict = OnConflictStrategy.REPLACE)
    suspend fun addActor(actorItem: List<ActorItem>)

    @Query("SELECT * FROM actor")
    suspend fun getActor():List<ActorItem>
}

所以当与网络连接时,数据来自 API。但是现在我在失去连接时如何从数据库中获取数据。

【问题讨论】:

  • 在其他部分你可以写actorData.postValue(databaseHelper.actorDao().getActor())这是你问的吗?还是在网络断开时想要一个监听器?
  • 我和你写的一样,但它说需要 Actor,但找到了 ActorList
  • 请同时附上您看到的错误。附上截图或发布错误
  • 如果我没记错的话,问题出在 Rest API 响应中。
  • 类型不匹配。要求:演员!找到:列表

标签: android kotlin mvvm android-room


【解决方案1】:

请这样使用:

@Query("SELECT * FROM ActorItem")
suspend fun getActor():List<ActorItem>

使用 ActorItem 表作为模型

actorData.postValue(databaseHelper.actorDao().getActor()) 那么您将不会收到类型不匹配错误。

【讨论】:

    【解决方案2】:

    你可以试试这个方法

    @Query("SELECT * FROM actor")
    fun getActor():LiveData<List<ActorItem>>
    

    那你可以试试

     actorDao.getActor().observe(this, Observer<List<ActorItem>>() {
                @Override
                public void onChanged(List<ActorItem> actorItemList) {
    
                }
            })
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-24
      • 2019-12-14
      • 1970-01-01
      • 1970-01-01
      • 2018-08-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多