首页 > 解决方案 > 观察数组中的单个元素

问题描述

我在这里遇到了两个代码问题,

  1. 如何创建一个可以观察单个数组项而不是整个数组的观察者。

  2. AndroidSchedulers.mainThread() 抛出错误

    override fun onCreate(savedInstanceState: Bundle?) {
    
     super.onCreate(savedInstanceState)
     setContentView(R.layout.activity_main)
    
     val greetings = arrayOf("Hello A", "Hello B", "Hello C")
    
     val observable = Observable.fromArray(greetings)
    
     val observer = object: DisposableObserver<Array<String>>() {
         override fun onNext(t: Array<String>?) {
             println(t)
         }
    
         override fun onError(e: Throwable?) {
    
         }
    
         override fun onComplete() {
    
         }
     }
    
     observable.subscribeOn(Schedulers.io())
             .observeOn(AndroidSchedulers.mainThread())
             .subscribeWith(observer)
    

    }

来自 #2 的错误

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.fromarraydemo, PID: 11002
    java.lang.NoSuchMethodError: No static method metafactory(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite; in class Ljava/lang/invoke/LambdaMetafactory; or its super classes (declaration of 'java.lang.invoke.LambdaMetafactory' appears in /apex/com.android.art/javalib/core-oj.jar)
        at io.reactivex.rxjava3.android.schedulers.AndroidSchedulers.<clinit>(AndroidSchedulers.java:33)
        at io.reactivex.rxjava3.android.schedulers.AndroidSchedulers.mainThread(AndroidSchedulers.java:44)
        at com.example.fromarraydemo.MainActivity.onCreate(MainActivity.kt:36)

尝试#1

val observer = object: DisposableObserver<String>() {
    override fun onNext(t: String?) {
        TODO("Not yet implemented")
    }

    override fun onError(e: Throwable?) {
        TODO("Not yet implemented")
    }

    override fun onComplete() {
        TODO("Not yet implemented")
    }

}

但是.subscribeWith(observer)有一个问题

Type mismatch: inferred type is <no name provided>! but Observer<in Array<String>!>! was expected

标签: androidkotlinrx-javarx-android

解决方案


关于错误#1,我认为有一个功能

val observable = greetings.toObservable()

这似乎可以满足您的需求(与您的尝试一起使用DisposableObserver<String>

关于错误 #2,我复制粘贴了您的代码,但在 AndroidSchedulers.mainThread() 上没有收到任何错误,但我使用的是 rxjava2,所以情况并不完全相同。(我在这里所做的唯一更改是从 String 和 Throwable 中删除可选)

也许如果您没有找到更好的解决方案,可以选择回到 rxjava2 吗?


推荐阅读