gpt4 book ai didi

android - rxandroid 要求在 ui 线程上运行,即使它已在 AndroidSchedulers.mainThread() 上订阅

转载 作者:IT老高 更新时间:2023-10-28 23:29:02 25 4
gpt4 key购买 nike

我写了一个订阅者,当谷歌地图的 OnCameraChangeListener 被触发时,它会被触发。

Observable.create(new Observable.OnSubscribe<LatLng>()
{
@Override
public void call(Subscriber<? super LatLng> subscriber)
{
if (!subscriber.isUnsubscribed())
{
mMap.setOnCameraChangeListener(cameraPosition ->
subscriber.onNext(cameraPosition.target));
}
}
}).subscribeOn(AndroidSchedulers.mainThread())
.observeOn(AndroidSchedulers.mainThread())
.onErrorResumeNext(Observable.<LatLng>empty())
.debounce(1, TimeUnit.SECONDS)
.subscribe(position -> {
if (position.latitude != 0 && position.longitude != 0)
{
updateLocationMarker(position);
}
});

我正在更新位置标记如下:

private void updateLocationMarker(LatLng center)
{
locationMarkertext.setText("Lat:" + center.latitude + " Long:" + center.longitude);
//locationMarkerLayout.setVisibility(View.VISIBLE);
}

即使我的代码说要在 AndroidSchedulers.mainThread() 上运行,我也会收到此错误:

Caused by: rx.exceptions.OnErrorNotImplementedException: Only the original thread that created a view hierarchy can touch its views.

谁能帮我理解我的方法有什么问题

最佳答案

debounce 运算符默认运行在计算调度程序上,它将传递流经的事件。您必须使用主线程调度程序对其进行参数化:

.debounce(1, TimeUnit.SECONDS, AndroidSchedulers.mainThread())

此外,根据您创建通知源的位置,您可能根本不需要 observeOnsubscribeOn

关于android - rxandroid 要求在 ui 线程上运行,即使它已在 AndroidSchedulers.mainThread() 上订阅,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36996596/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com