繁体   English   中英

如何从房间数据库 kotlin 中获取数据

[英]how to fetch data from room Database kotlin

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

Json

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

这是 Model

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


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

刀Class

@Dao
interface ActorDao {

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

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

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

请像这样使用:

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

使用 ActorItem 表作为 model

actorData.postValue(databaseHelper.actorDao().getActor()) 则不会出现类型不匹配错误。

你可以试试这种方式

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

那你可以试试

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

            }
        })

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM