我写了一个订阅者,当谷歌地图被触发时会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);
}
});
Run Code Online (Sandbox Code Playgroud)
我正在更新位置标记,如下所示:
private void updateLocationMarker(LatLng center)
{
locationMarkertext.setText("Lat:" + center.latitude + " Long:" + center.longitude);
//locationMarkerLayout.setVisibility(View.VISIBLE);
}
Run Code Online (Sandbox Code Playgroud)
即使我的代码说要运行AndroidSchedulers.mainThread()我也会收到此错误:
引发者:rx.exceptions.OnErrorNotImplementedException:只有创建视图层次结构的原始线程才能触及其视图.
有人可以帮我理解我的方法有什么问题
aka*_*okd 40
debounce默认情况下,运算符在计算调度程序上运行,它将传递流经的事件.您必须使用主线程调度程序对其进行参数化:
.debounce(1, TimeUnit.SECONDS, AndroidSchedulers.mainThread())
Run Code Online (Sandbox Code Playgroud)
此外,根据在其中创建您的通知源,你可能并不需要observeOn,并subscribeOn在所有.
| 归档时间: |
|
| 查看次数: |
4880 次 |
| 最近记录: |