简体   繁体   English

无法从Android的分页中的DataSource.Factory获得toLiveData

[英]toLiveData not available from DataSource.Factory in Android's Paging

I am trying to use LiveData for paging data from my Room database. 我正在尝试使用LiveData从Room数据库中分页数据。 The sample code from Google indicates the use of a toLiveData function: Google的示例代码表明使用了toLiveData函数:

class ConcertViewModel(concertDao: ConcertDao) : ViewModel() {
    val concertList: LiveData<PagedList<Concert>> =
            concertDao.concertsByDate().toLiveData(pageSize = 50)
}

https://developer.android.com/topic/libraries/architecture/paging https://developer.android.com/topic/libraries/architecture/paging

Here is the code I created that follows their example: 这是我创建的遵循其示例的代码:

AppDao.kt AppDao.kt

import androidx.lifecycle.LiveData
import androidx.paging.DataSource
import androidx.room.Dao
import androidx.room.Insert
import androidx.room.OnConflictStrategy.REPLACE
import androidx.room.Query
import com.example.model.UserConnection

@Dao
interface AppDao {
    @Query("SELECT * FROM UserConnection")
    fun getAll(): LiveData<List<UserConnection>>

    @Insert(onConflict = REPLACE)
    fun save(userConnection: UserConnection)

    @Query("SELECT * FROM UserConnection ORDER BY firstName DESC")
    fun connectionsByFirstName(): DataSource.Factory<Int, UserConnection>
}

AppDatabase.kt AppDatabase.kt

import androidx.room.Database
import androidx.room.RoomDatabase
import androidx.room.TypeConverters
import com.example.model.UserConnection

@Database(entities = arrayOf(UserConnection::class), version = 1, exportSchema = true)
@TypeConverters(RoomConverters::class)
abstract class AppDatabase : RoomDatabase() {
    abstract fun appDao(): AppDao
}

ConnectionsViewModel.kt ConnectionsViewModel.kt

import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import androidx.paging.DataSource
import androidx.paging.PagedList
import com.linkedintools.da.local.room.AppDao
import com.example.model.UserConnection
import javax.inject.Inject

class ConnectionsViewModel @Inject constructor(appDao: AppDao) : ViewModel() {

    val connectionsDataSource : DataSource.Factory<Int, UserConnection> = appDao.connectionsByFirstName()

    val concertList: LiveData<PagedList<UserConnection>> = connectionsDataSource.toLiveData(pageSize = 40)

}

build.gradle build.gradle

dependencies {
    def room_version = "2.1.0-rc01"
    def paging_version = "2.1.0"

    implementation "androidx.room:room-runtime:$room_version"
    kapt "androidx.room:room-compiler:$room_version" // For Kotlin use kapt instead of annotationProcessor

    // optional - Kotlin Extensions and Coroutines support for Room
    implementation "androidx.room:room-ktx:$room_version"

    // optional - RxJava support for Room
    implementation "androidx.room:room-rxjava2:$room_version"

    // Paging
    implementation "androidx.paging:paging-runtime:$paging_version"

}

The toLiveData is not available. toLiveData不可用。 Am I doing something wrong or is the sample code from Google out of date? 我做错什么了吗?还是Google的示例代码已经过时了?

toLiveData is an extention fun, import this library and it is all done : toLiveData是一种扩展乐趣,导入该库就可以了:
androidx.paging:paging-runtime-ktx:2.1.0-rc01 androidx.paging:paging-runtime-ktx:2.1.0-rc01

Addionaly check this google samples project Paging With Network Sample 另外检查此Google样本项目与网络样本的分页

https://github.com/googlesamples/android-architecture-components/tree/master/PagingWithNetworkSample https://github.com/googlesamples/android-architecture-components/tree/master/PagingWithNetworkSample

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

相关问题 Android 分页库 - Map 房间 DataSource.Factory&lt;*, DatabaseModel&gt; 到 DataSource.Factory&lt;*, PresenterModel&gt; - Android Paging Library - Map Room DataSource.Factory<*, DatabaseModel> to DataSource.Factory<*, PresenterModel> Android体系结构组件分页DataSource.Factory错误 - Android architecture components paging DataSource.Factory error DataSource.Factory 未使用正确的变量值 Android 分页 - DataSource.Factory is not using correct variable value Android Paging 用于多个数据源的分页库 DataSource.Factory - Paging library DataSource.Factory for multiple data sources 如何从 DataSource.Factory 获取数据 - How to get data from DataSource.Factory 自定义构造函数PageKeyedDataSource()在分页库的datasource.factory()中崩溃应用程序 - Custom constructor PageKeyedDataSource() crashes app in datasource.factory() of paging library 房间本地单元测试 - 从 DataSource.Factory 查询 PagedList - Room Local Unit Test - Query PagedList from DataSource.Factory Android Room 在使用 DataSource.Factory 时如何按文本搜索? - Android Room how to search by text when using DataSource.Factory? 具有多视图 RecyclerView 的 Room DataSource.Factory - Room DataSource.Factory with multiple view RecyclerView 如何测试返回DataSource.Factory的Dao方法? - How to test Dao methods which return DataSource.Factory?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM