微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

观察数组中的单个元素

如何解决观察数组中的单个元素

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

  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

解决方法

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

val observable = greetings.toObservable()

似乎可以满足您的需求(尝试DisposableObserver<String>使用)

关于错误#2,我复制粘贴了您的代码,并且在AndroidSchedulers.mainThread()上未收到任何错误,但是我使用的是rxjava2,因此情况并非完全相同。 (我要做的唯一更改是从String和Throwable中删除了可选内容)

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。