android - 观察数组中的单个元素
问题描述
我在这里遇到了两个代码问题,
如何创建一个可以观察单个数组项而不是整个数组的观察者。
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 吗?
推荐阅读
- magento - Magento 2 升级到最新版本
- arrays - 将 Google 表格单元格内的 JSON 拆分为多行的公式
- github-api-v3 - 检查是否创建了新的拉取请求
- arrays - 如何将表格读入数组 VBA、行、列和所有表格的值
- json - Ansible Jinja to_json 过滤多行和漂亮的格式
- matlab - 在 MATLAB 中将非结构化文本加载为矩阵
- git - Gitlab 在合并请求期间排除某些文件的覆盖
- java - 如何使用按钮的 onclick 事件更新 MySQL 数据库?Java, Jquery, JSPs MVC
- java - 是否应该返回停止整个程序?
- azure - Azure edgeAgent 在 Azure 门户上未处于运行状态