Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
链式调用android中Rxjava中的异常(RxJavaAssemblyException:Assembly)_Android_Rx Java_Chaining - Fatal编程技术网

链式调用android中Rxjava中的异常(RxJavaAssemblyException:Assembly)

链式调用android中Rxjava中的异常(RxJavaAssemblyException:Assembly),android,rx-java,chaining,Android,Rx Java,Chaining,我正在用RxJava做一个调用。我可能在通话中使用了太多的锁链。有如此多的可观察和转换,我担心集合丢失了。不幸的是,我需要使用这些函数。我这里有一个方法,我在片段中调用它。当我调试并设置断点时,该方法永远不会被调用 在我的片段中,我在这里调用offlineItems(): 我绝对不是RxJava专家,所以如果有人能指出我做错了什么 编辑 堆栈跟踪: RxJavaAssemblyException: assembled at dalvik.system.VMStack.getThreadStack

我正在用RxJava做一个调用。我可能在通话中使用了太多的锁链。有如此多的可观察和转换,我担心集合丢失了。不幸的是,我需要使用这些函数。我这里有一个方法,我在片段中调用它。当我调试并设置断点时,该方法永远不会被调用

在我的片段中,我在这里调用offlineItems():

我绝对不是RxJava专家,所以如果有人能指出我做错了什么

编辑 堆栈跟踪:

RxJavaAssemblyException: assembled
at dalvik.system.VMStack.getThreadStackTrace(Native Method)
at io.reactivex.Observable.map(Observable.java:9781)
at DownloadsFragment.streamDownloads(DownloadsFragment.kt:143)
at DownloadsFragment.onResume(DownloadsFragment.kt:128)
at androidx.fragment.app.Fragment.performResume(Fragment.java:2649)
at androidx.fragment.app.FragmentManagerImpl.moveToState
at  FragmentManagerImpl.moveFragmentToExpectedState
at  FragmentManagerImpl.moveToState(FragmentManagerImpl.java:1303)
at  FragmentManagerImpl.dispatchStateChange(FragmentManagerImpl.java:2659)
at  FragmentManagerImpl.dispatchResume(FragmentManagerImpl.java:2625)
at androidx.fragment.app.Fragment.performResume(Fragment.java:2658)
at FragmentManagerImpl.moveToState(FragmentManagerImpl.java:922)
at FragmentManagerImpl.moveFragmentToExpectedState
at FragmentManagerImpl.moveToState(FragmentManagerImpl.java:1303)
at FragmentManagerImpl.executeOpsTogether(FragmentManagerImpl.java:1884)
at FragmentManagerImpl.removeRedundantOperationsAndExecute
at FragmentManagerImpl.execPendingActions(FragmentManagerImpl.java:1727)
at FragmentManagerImpl$2.run(FragmentManagerImpl.java:150)
at android.os.Handler.handleCallback(Handler.java:873)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6669)
at RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)

您是否使用RxJavaExtensions中的RxJavaAssemblyTracking?如果是这样,没有AssemblyTracking,StackTrace会是什么样子?@HansWurst是的,我是。没有它,我就没有堆栈跟踪。这是完整的堆栈跟踪吗?我找不到实际的堆栈帧。我试图复制它,但到目前为止,我在这方面运气不太好。当您禁用程序集跟踪时,在onResume()方法的subscribe中是否会出现OnErrorNotImplementException,或者它只是以静默方式失败?@HansWurst只是以静默方式失败。我也只是偶尔得到堆栈跟踪,这是我通过调试发现的。Logcat或Debug console.method offlineItems中没有任何内容。您应该将所有代码放入链中,而不是像这样调用。使返回可见。fromCallable{getAllMyDownloadedMediaItems()}。FlatMapetable。。。
fun offlineItems(): Observable<List<MediaItem>> {

  val list = getAllMyDownloadedMediaItems()
  return list.flatMapIterable { it }
    .flatMap { mediaStore.getMediaItemWithId(MediaId(it.request.id)) } // this method is called . 
    .toList()                                                          // returns an Observable<MediaItem>
    .toObservable()
 }
override fun getMediaItemWithId(mediaId: MediaId): Observable<MediaItem> {
    return if (isOnline()) {
      Observable.just(Unit)
        .effectMap { fetchAndStoreRemote(mediaId) }
        .flatMap { mediaItemFromDB(mediaId) }
    } else {
      mediaItemFromDB(mediaId)
    }
  }
fun getAllMyDownloadedMediaItems(): Observable<List<Download>> {
    return Observable.just(downloadManager.downloadIndex.getDownloads(Download.STATE_COMPLETED).use { index ->
      mutableListOf<Download>().apply {
        if (index.isFirst || index.moveToFirst()) {
          do {
            add(index.download)
          } while (index.moveToNext())
       }
      }
    })
  }
private fun downloadLoaded(downloads: List<MediaItem>) {
  if (downloads.isEmpty()) {
    downloadStateView.setState(StateView.State.EMPTY)
  } else {
    downloadStateView.setState(StateView.State.CONTENT)
    episodeAdapter.items = listOf(Header(downloads.size)) + downloads.map(::Item)
  }
}
override fun onResume() {
  super.onResume()
  Observable.merge(
    streamDownloads(),
    handleEmptyAction()
  ).autoDispose(this)
   .subscribe()
 }
RxJavaAssemblyException: assembled
at dalvik.system.VMStack.getThreadStackTrace(Native Method)
at io.reactivex.Observable.map(Observable.java:9781)
at DownloadsFragment.streamDownloads(DownloadsFragment.kt:143)
at DownloadsFragment.onResume(DownloadsFragment.kt:128)
at androidx.fragment.app.Fragment.performResume(Fragment.java:2649)
at androidx.fragment.app.FragmentManagerImpl.moveToState
at  FragmentManagerImpl.moveFragmentToExpectedState
at  FragmentManagerImpl.moveToState(FragmentManagerImpl.java:1303)
at  FragmentManagerImpl.dispatchStateChange(FragmentManagerImpl.java:2659)
at  FragmentManagerImpl.dispatchResume(FragmentManagerImpl.java:2625)
at androidx.fragment.app.Fragment.performResume(Fragment.java:2658)
at FragmentManagerImpl.moveToState(FragmentManagerImpl.java:922)
at FragmentManagerImpl.moveFragmentToExpectedState
at FragmentManagerImpl.moveToState(FragmentManagerImpl.java:1303)
at FragmentManagerImpl.executeOpsTogether(FragmentManagerImpl.java:1884)
at FragmentManagerImpl.removeRedundantOperationsAndExecute
at FragmentManagerImpl.execPendingActions(FragmentManagerImpl.java:1727)
at FragmentManagerImpl$2.run(FragmentManagerImpl.java:150)
at android.os.Handler.handleCallback(Handler.java:873)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6669)
at RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)