第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

線程順序執(zhí)行中的RxJava newbee問題

線程順序執(zhí)行中的RxJava newbee問題

縹緲止盈 2021-06-27 17:20:39
大家晚上好,我是 RxJava 和函數(shù)式編程的新手。所以我有一個使用方法的 Retrofit repo: @POST("/rest/getMonitors")Observable<List<Camera>> getMonitors(@Body User user);這是正常工作。它返回我的相機實體列表。在我的主要活動中:List<Camera> cameraList;@Overrideprotected 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 方法中,我正在調(diào)用 onStart。但是當(dāng)我打電話時:@Overrideprotected void onStart() {    super.onStart();    Log.i("@@@SIZE", String.valueOf(cameraList.size()));}它給了我:'int java.util.List.size()' on a null object reference你能解釋一下這個問題嗎,請。非常感謝您的幫助。
查看完整描述

2 回答

?
千萬里不及你

TA貢獻(xiàn)1784條經(jīng)驗 獲得超9個贊

問題是您protected void onStart()的生命周期方法Activity是在Activity可見后調(diào)用的。但那時你onComplete還沒有被調(diào)用,所以cameraList仍然是null. 因此,以某種非生命周期方法(如果需要創(chuàng)建一個)或直接在onComplete.

正如@Ben P 指出的那樣,直接調(diào)用生命周期方法是個壞主意。在這種情況下,您會干預(yù)可能導(dǎo)致意外行為的正常生命周期調(diào)用序列。


查看完整回答
反對 回復(fù) 2021-07-07
?
烙印99

TA貢獻(xiàn)1829條經(jīng)驗 獲得超13個贊

顯然你有,NPE因為你忘記了從改造中獲取相機是異步操作。這意味著它不會在您調(diào)用它時完成,而是在一段時間后完成。

所以你有什么

  1. 你打過電話了 onCreate

  2. 異步操作開始,您請求列表

  3. 您在 中使用該列表onStart,但該列表尚不 存在

  4. 異步操作結(jié)束,列表現(xiàn)在可用。

換句話說,在調(diào)用 RxJava 的subscribe方法之前,您不能使用它。

不要onStart()手動調(diào)用,畢竟它的系統(tǒng)回調(diào)會在用戶看到屏幕時自動運行。它發(fā)生的時間比您手動調(diào)用要早得多。


查看完整回答
反對 回復(fù) 2021-07-07
  • 2 回答
  • 0 關(guān)注
  • 178 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號