亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

當您在 Firebase 上使用 .setPersistenceEnabled(true) 時

當您在 Firebase 上使用 .setPersistenceEnabled(true) 時

慕田峪9158850 2022-07-27 21:06:08
我懷疑在addOnCompleteListener使用時是否真的有必要打電話setPersistence(true)。當我使用addOnCompleteListener時,如果我的互聯網處于離線狀態,屏幕會繼續加載,因為addOnCompleteListener永遠不會結束 - 等待連接。所以,我不能離線添加任何東西,因為加載屏幕正在等待連接(打破了持久性的概念)。下面的示例顯示了我在說什么:getDatabaseReference()        .child("Example")        .child(userID)        .push()        .setValue(dataExample)        .addOnCompleteListener(new OnCompleteListener<Void>() {    @Override    public void onComplete(@NonNull Task<Void> task) {        if (task.isSuccessful()){            //interface call with success response            interface.onSuccess();        }else {            //interface call with failure response            interface.onFailure(task.getException().getMessage());        }    }});所以,正如我所說,如果我的互聯網處于離線狀態,我無法完成操作,加載屏幕會永遠加載(等待完整偵聽器)。我發現,如果沒有addOnCompleteListener,我可以在離線時添加和刪除值,因為它們在緩存中,所以當我有互聯網時,應用程序會將更新發送到在線數據庫 - 這太棒了。下面的示例顯示了我的建議: getDatabaseReference()        .child("Example")        .child(userID)        .push()        .setValue(dataExample); //interface call with successful response without handling error (because it won't happen) interface.onSuccess();所以,我的問題是,這樣做對嗎?這是一個好習慣嗎?沒有addOnCompleteListener,并且可以離線使用我的應用程序,僅在可以時發送更新?
查看完整描述

1 回答

?
德瑪西亞99

TA貢獻1770條經驗 獲得超3個贊

您所看到的是預期的行為。對 RealtimeDatabase 的寫入在到達服務器并對其他客戶端可見之前不會被視為“完成”。在 SDK 設法同步之前,本地緩存的寫入不被認為是完整的。如果您不需要知道服務器最終何時接收到寫入,或者它是否成功,則無需向它生成的 Task 注冊偵聽器。



查看完整回答
反對 回復 2022-07-27
  • 1 回答
  • 0 關注
  • 100 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號