java - RxJava newbee 线程顺序执行中的问题

标签 java android rx-java2

大家晚上好,我是 RxJava 和函数式编程的新手。所以我有一个 Retrofit repo 方法:

 @POST("/rest/getMonitors")
Observable<List<Camera>> getMonitors(@Body User user);

这是正常工作。它返回我的相机实体列表。

在我的 MainActivity 中:

List<Camera> cameraList;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


    serverApi.getMonitors(user)
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(
                    cameras -> cameraList = cameras,
                    throwable -> {},
                    ()->onStart()
                    );
 }

所以在 OnCreate 中,我试图获取摄像机列表。在 onNext 方法中,我将相机保存在本地字段中,而在 onComplete 方法中,我调用了 onStart。

但是当我打电话时:

@Override
protected void onStart() {
    super.onStart();
    Log.i("@@@SIZE", String.valueOf(cameraList.size()));}

它给了我:

'int java.util.List.size()' on a null object reference

你能解释一下这个问题吗?非常感谢您的帮助。

最佳答案

问题是您的 protected void onStart() 是您的 Activity 的生命周期方法,它在 Activity 可见后调用。但此时您的 onComplete 尚未被调用,因此 cameraList 仍为 null。因此,在某些非生命周期方法(如果需要创建一个)或在 onComplete 中打印内容。

正如@Ben P 指出的那样,直接调用生命周期方法不是一个好主意。在这种情况下,您干预了可能导致意外行为的正常生命周期调用序列。

关于java - RxJava newbee 线程顺序执行中的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51754838/

相关文章:

java - Derby 和 eclipse 。 "Can' t find main"异常。如何将Derby添加到配置类路径?

java - Hibernate 使用 OneToMany 添加模型

java - 继承场景下引用和对象的关系

android - 何时在 rxjava 中使用 `unSubscribeOn`

java - Single.retry(3) 仅调用一次

android - uniqueUntilChanged 不起作用(例如,不同的列表大小不被视为不同)

java - 为 jar 可执行文件创建 Makefile

android - 未调用 MyFirebaseInstanceIDService "onTokenRefresh"

android - 适用于 Android 和 iOS 的 MQTT over websocket

java - 如何在java中使用从android发送到服务器的json对象?