【问题标题】:Room database retrieve data from database房间数据库从数据库中检索数据
【发布时间】:2021-02-11 16:33:24
【问题描述】:

我在我的项目中使用谷歌地图,我尝试检索纬度和经度,并从 SQLite 数据库向地图添加标记。当我尝试检索时,我收到 Null。问题出在哪里?

你可以在下面找到我的代码

class App : Application() {
    var database: markerDatabase? = null
        private set

    override fun onCreate() {
        super.onCreate()
        instance = this

        database = Room.databaseBuilder(this, markerDatabase::class.java, "stopmarker.db")
            .createFromAsset("databases/stopmarker.db")
            .allowMainThreadQueries()
            .build()
    }

    companion object {
        var instance: App? = null
    }
}
interface markerDAO {
    @Query("SELECT * FROM bus_stop")
    fun getAll(): LiveData<List<Marker>>

   @Query("SELECT title FROM bus_stop")
   fun getTitle(): LiveData<List<String>>

    @Query("SELECT lat FROM bus_stop")
   fun getLatitude(): LiveData<List<Double>>

    @Query("SELECT lon FROM bus_stop")
    fun getLongitude(): LiveData<List<Double>>
}
abstract class markerDatabase : RoomDatabase() {
    abstract fun MarkerDao(): markerDAO?
}

在主活动中

val db = App.instance

val lat = db?.database?.MarkerDao()?.getLatitude()

val lon = db?.database?.MarkerDao()?.getLongitude()

       Log.i("My_Tag",lat?.value?.get(1).toString())

结果:

【问题讨论】:

  • 您应该使用调试器并查看?. 运算符长链的哪一部分为空。

标签: android database sqlite kotlin android-room


【解决方案1】:

LiveData 延迟加载数据,如果您想观察其中的任何变化,那么您应该使用 Oserver 并相应地更新 UI。为此,您需要遵循 MVVM 设计模式。这很简单。

但如果您只想接收数据,请使用 协程

@Query("SELECT lat FROM bus_stop")
suspend fun getLatitude(): List<Double>

【讨论】:

  • 你能解释一下如何在我的代码中实现吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多