getMonito-6ren">
gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 23:41:58 25 4
gpt4 key购买 nike

大家晚上好,我是 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/

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