观察者方法从未被使用。

3

我仍在努力理解 RxJava 中的观察者。我有一个 Retrofit 客户端、一个实用方法和一个管理数据同步功能的类。当我尝试观察我的可观察对象时,我没有看到任何指示表明观察者已订阅。

我的实用方法如下:

public static Single<Response<SyncResponse>> getSyncData() {

    Single response = FestApiClient.getInstance().postSyncData()
            .observeOn(Schedulers.newThread())
            .subscribeOn(AndroidSchedulers.mainThread());
    return response;
}

我的Retrofit客户端

public Single<Response<SyncResponse>> postSyncData() {

    Single response = mFestApiClientService.postEventSyncList("my endpoint");
    return response;

}

我的数据同步管理器
Disposable syncDisposable = ScheduleUtils.getSyncData().subscribe(syncResponse -> {


        if (syncResponse.isSuccessful()){
            Log.d(TAG, "Successfully posted events!");

            addEventsFromSync(syncResponse.body());
            mSyncDialog.dismiss();

        } else {
            getFailureMessage(syncResponse.body());
            Log.d(TAG, "Failed posting events");


        }
    }, throwable -> {
        Log.d(TAG, "Failed posting events");

    });
    mCompositeDisposable.add(syncDisposable);

我认为syncResponse.onFailure和onSuccess方法会被触发,但是我从未看到日志消息或命中断点。如果您发现任何问题,请告诉我。谢谢!


在执行add操作之前,mCompositeDisposable.isDisposed()的值是多少? - akarnokd
CompositeDisposable mCompositeDisposable = new CompositeDisposable(); - Dan Schneider
我是指在 mCompositeDisposable.add(syncDisposable); 之前添加 System.out.println(mCompositeDisposable.isDisposed()); 并告诉我们它在控制台上打印的内容。 - akarnokd
我的错。我在logcat中得到了mCompositeDisposable: false - Dan Schneider
在这种情况下,开始在各个位置添加doOnNext/doOnSuccess调用,以查看事件停止的位置。您还可以添加doOnSubscribe/doOnDispose调用。 - akarnokd
@DanSchneider,解决这个问题有什么进展吗? - Levi Moreira
1个回答

3

您正在错误的线程上观察。请切换到主线程,使用AndroidSchedulers。

public static Single<Response<SyncResponse>> getSyncData() {

     Single response = FestApiClient.getInstance().postSyncData()
             .subscribeOn(Schedulers.io())
             .observeOn(AndroidSchedulers.mainThread());
     return response;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接