Skip to main content
edited tags
Link
VLAZ
  • 29.6k
  • 9
  • 65
  • 88
improved code formatting
Source Link
tynn
  • 40k
  • 8
  • 119
  • 152
class MyDatasource(  private val queryMap: HashMap<String, String>) : ItemKeyedDataSource<String, Order>() {  private val compositeDisposable: CompositeDisposable by lazy { CompositeDisposable() }  override fun loadInitial(params: LoadInitialParams<String>, callback: LoadInitialCallback<Order>) {   compositeDisposable.add(   MyService.getService().fetchData(queryMap)   .subscribeOn(Schedulers.io())   .observeOn(AndroidSchedulers.mainThread())   .subscribeWith(object : DisposableObserver<OrdersResponse>() {   override fun onNext(orders: OrdersResponse) {   callback.onResult(orders.data)   }   override fun onError(e: Throwable) {   e.printStackTrace()   }   override fun onComplete() {   }   })   )  }  override fun loadBefore(params: LoadParams<String>, callback: LoadCallback<Order>) {   // do nothing  }  override fun loadAfter(params: LoadParams<String>, callback: LoadCallback<Order>) {   queryMap["offsetOrderId"] = params.key   compositeDisposable.add(   MyService.getService().fetchData(queryMap)   .subscribeOn(Schedulers.io())   .observeOn(AndroidSchedulers.mainThread())   .subscribeWith(object : DisposableObserver<OrdersResponse>() {   override fun onNext(orders: OrdersResponse) {   callback.onResult(orders.data)   }   override fun onError(e: Throwable) {   }   override fun onComplete() {   }   })   )  }  override fun getKey(item: Order): String {   return item.orderId  } } 

}

I build pagedlist in my viewmodel

class MyViewModel() : ViewModel() {    private var myPagingConfig: PagedList.Config? = null  var dataList: LiveData<PagedList<Order>>? = null  fun getOrders(params: HashMap<String, String>) {     if (myPagingConfig == null) {   myPagingConfig = PagedList.Config.Builder()   .setPageSize(LIMIT)   .setPrefetchDistance(10)   .setEnablePlaceholders(false)   .build()   }   dataList = LivePagedListBuilder(MyDataFactory(   MyDatasource(params)), myPagingConfig!!)   .setInitialLoadKey(null)   .setFetchExecutor(Executors.newFixedThreadPool(5))   .build()  } } 

}

class MyDatasource( private val queryMap: HashMap<String, String>) : ItemKeyedDataSource<String, Order>() { private val compositeDisposable: CompositeDisposable by lazy { CompositeDisposable() } override fun loadInitial(params: LoadInitialParams<String>, callback: LoadInitialCallback<Order>) { compositeDisposable.add( MyService.getService().fetchData(queryMap) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribeWith(object : DisposableObserver<OrdersResponse>() { override fun onNext(orders: OrdersResponse) { callback.onResult(orders.data) } override fun onError(e: Throwable) { e.printStackTrace() } override fun onComplete() { } }) ) } override fun loadBefore(params: LoadParams<String>, callback: LoadCallback<Order>) { // do nothing } override fun loadAfter(params: LoadParams<String>, callback: LoadCallback<Order>) { queryMap["offsetOrderId"] = params.key compositeDisposable.add( MyService.getService().fetchData(queryMap) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribeWith(object : DisposableObserver<OrdersResponse>() { override fun onNext(orders: OrdersResponse) { callback.onResult(orders.data) } override fun onError(e: Throwable) { } override fun onComplete() { } }) ) } override fun getKey(item: Order): String { return item.orderId } 

}

I build pagedlist in my viewmodel

class MyViewModel() : ViewModel() {   private var myPagingConfig: PagedList.Config? = null var dataList: LiveData<PagedList<Order>>? = null fun getOrders(params: HashMap<String, String>) { if (myPagingConfig == null) { myPagingConfig = PagedList.Config.Builder() .setPageSize(LIMIT) .setPrefetchDistance(10) .setEnablePlaceholders(false) .build() } dataList = LivePagedListBuilder(MyDataFactory( MyDatasource(params)), myPagingConfig!!) .setInitialLoadKey(null) .setFetchExecutor(Executors.newFixedThreadPool(5)) .build() } 

}

class MyDatasource(  private val queryMap: HashMap<String, String>) : ItemKeyedDataSource<String, Order>() {  private val compositeDisposable: CompositeDisposable by lazy { CompositeDisposable() }  override fun loadInitial(params: LoadInitialParams<String>, callback: LoadInitialCallback<Order>) {   compositeDisposable.add(   MyService.getService().fetchData(queryMap)   .subscribeOn(Schedulers.io())   .observeOn(AndroidSchedulers.mainThread())   .subscribeWith(object : DisposableObserver<OrdersResponse>() {   override fun onNext(orders: OrdersResponse) {   callback.onResult(orders.data)   }   override fun onError(e: Throwable) {   e.printStackTrace()   }   override fun onComplete() {   }   })   )  }  override fun loadBefore(params: LoadParams<String>, callback: LoadCallback<Order>) {   // do nothing  }  override fun loadAfter(params: LoadParams<String>, callback: LoadCallback<Order>) {   queryMap["offsetOrderId"] = params.key   compositeDisposable.add(   MyService.getService().fetchData(queryMap)   .subscribeOn(Schedulers.io())   .observeOn(AndroidSchedulers.mainThread())   .subscribeWith(object : DisposableObserver<OrdersResponse>() {   override fun onNext(orders: OrdersResponse) {   callback.onResult(orders.data)   }   override fun onError(e: Throwable) {   }   override fun onComplete() {   }   })   )  }  override fun getKey(item: Order): String {   return item.orderId  } } 

I build pagedlist in my viewmodel

class MyViewModel() : ViewModel() {  private var myPagingConfig: PagedList.Config? = null  var dataList: LiveData<PagedList<Order>>? = null  fun getOrders(params: HashMap<String, String>) {     if (myPagingConfig == null) {   myPagingConfig = PagedList.Config.Builder()   .setPageSize(LIMIT)   .setPrefetchDistance(10)   .setEnablePlaceholders(false)   .build()   }   dataList = LivePagedListBuilder(MyDataFactory(   MyDatasource(params)), myPagingConfig!!)   .setInitialLoadKey(null)   .setFetchExecutor(Executors.newFixedThreadPool(5))   .build()  } } 

I useam using a paging library from Android Architecture Components.

However, when I observe dataListthe dataList in my activity, it sometimes (most of the times) returns an empty list, while in logcat iI see that iI had fetched data successfully. callback.onResult is invoked after it returns an empty list, but observer never gets notified again.

I use paging library from Android Architecture Components.

However, when I observe dataList in my activity, it sometimes (most of the times) returns empty list, while in logcat i see that i had fetched data successfully. callback.onResult is invoked after it returns empty list, but observer never gets notified again.

I am using a paging library from Android Architecture Components.

However, when I observe the dataList in my activity, it sometimes (most of the times) returns an empty list, while in logcat I see that I had fetched data successfully. callback.onResult is invoked after it returns an empty list, but observer never gets notified again.

added 4 characters in body
Source Link
Piyush
  • 18.9k
  • 5
  • 35
  • 64
Loading
Source Link
Ana Koridze
  • 1.8k
  • 3
  • 20
  • 28
Loading