【问题标题】:flutter firebase offline error caused by sending get request to real time database向实时数据库发送get请求导致的flutter firebase离线错误
【发布时间】:2022-02-11 06:49:00
【问题描述】:

我目前正在尝试同时使用 Flutter 和 Firebase 实时数据库,但每当我尝试获取或更新数据库时,我都会不断收到此错误。几天前它工作正常,但我不小心回滚了更改。

我已经完成了

WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp(
    name: "main_app",
    options: FirebaseOptions(
        apiKey: "XXXXXXXXXXXXXXXXXXXXXXXX",
        authDomain: "fXXXXXXXXXXXXX",
        databaseURL: "XXXXXXXXXXXXXXX",
        projectId: "XXXXXXXXXXXXXXXXX",
        storageBucket: "XXXXXXXXXXXXXX",
        messagingSenderId: "XXXXXXXXXX",
        appId: "XXXXXXXXXXXXXXXXXXXXX",
        measurementId: "XXXXX"
    )
  );

每当我这样做时都会发生错误 FirebaseDatabase.instance.ref("/users").get() 我尝试了不同的端点来检查这是否是问题,但错误很难理解 imo

I/RepoOperation( 6096): get for query / falling back to disk cache after error: Client is offline
E/firebase_database( 6096): An unknown error occurred handling native method call Query#get
E/firebase_database( 6096): java.util.concurrent.ExecutionException: java.lang.Exception: Client is offline
E/firebase_database( 6096):     at com.google.android.gms.tasks.Tasks.zza(com.google.android.gms:play-services-tasks@@18.0.1:5)
E/firebase_database( 6096):     at com.google.android.gms.tasks.Tasks.await(com.google.android.gms:play-services-tasks@@18.0.1:8)
E/firebase_database( 6096):     at io.flutter.plugins.firebase.database.FirebaseDatabasePlugin.lambda$queryGet$8$FirebaseDatabasePlugin(FirebaseDatabasePlugin.java:248)
E/firebase_database( 6096):     at io.flutter.plugins.firebase.database.-$$Lambda$FirebaseDatabasePlugin$zohedUhq4ZX8w6dhHgizPHWixGY.call(Unknown Source:4)
E/firebase_database( 6096):     at com.google.android.gms.tasks.zzz.run(com.google.android.gms:play-services-tasks@@18.0.1:1)
E/firebase_database( 6096):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
E/firebase_database( 6096):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
E/firebase_database( 6096):     at java.lang.Thread.run(Thread.java:919)
E/firebase_database( 6096): Caused by: java.lang.Exception: Client is offline
E/firebase_database( 6096):     at com.google.firebase.database.connection.PersistentConnectionImpl.lambda$get$1$PersistentConnectionImpl(PersistentConnectionImpl.java:441)
E/firebase_database( 6096):     at com.google.firebase.database.connection.-$$Lambda$PersistentConnectionImpl$DHovbqW2nxPacSd_wNZBtpYapws.run(Unknown Source:8)
E/firebase_database( 6096):     at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:462)
E/firebase_database( 6096):     at java.util.concurrent.FutureTask.run(FutureTask.java:266)
E/firebase_database( 6096):     at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:301)
E/firebase_database( 6096):     ... 3 more
E/flutter ( 6096): [ERROR:flutter/shell/common/shell.cc(94)] Dart Unhandled Exception: [firebase_database/unknown] java.lang.Exception: Client is offline
E/flutter ( 6096): 
E/flutter ( 6096): #0      StandardMethodCodec.decodeEnvelope (package:flutter/src/services/message_codecs.dart:607:7)
E/flutter ( 6096): #1      MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:167:18)
E/flutter ( 6096): <asynchronous suspension>
E/flutter ( 6096): #2      MethodChannel.invokeMapMethod (package:flutter/src/services/platform_channel.dart:367:43)
E/flutter ( 6096): <asynchronous suspension>
E/flutter ( 6096): #3      MethodChannelQuery.get (package:firebase_database_platform_interface/src/method_channel/method_channel_query.dart:74:22)
E/flutter ( 6096): <asynchronous suspension>
E/flutter ( 6096): #4      Query.get (package:firebase_database/src/query.dart:21:27)
E/flutter ( 6096): <asynchronous suspension>
E/flutter ( 6096): , stack trace: #0      MethodChannelQuery.get (package:firebase_database_platform_interface/src/method_channel/method_channel_query.dart:86:7)
E/flutter ( 6096): <asynchronous suspension>
E/flutter ( 6096): #1      Query.get (package:firebase_database/src/query.dart:21:27)
E/flutter ( 6096): <asynchronous suspension>
E/flutter ( 6096): 

【问题讨论】:

    标签: android firebase flutter dart firebase-realtime-database


    【解决方案1】:

    您似乎在呼叫get(),而您处于离线状态且缓存中没有数据。

    请记住,您必须为 Firebase 实时数据库显式启用磁盘持久性,然后它才能在您离线时从中读取数据。您可以通过在应用程序开始时调用setPersistenceEnabled(true) 来执行此操作,然后再调用任何读/写数据的方法:

    FirebaseDatabase.instance.setPersistenceEnabled(true);
    

    【讨论】:

    • 我的一个问题是客户端在线。我目前在调试模式下使用我的手机来测试我的应用程序与 wifi 和一切。 tbh idk 该怎么做,因为这一切都很好,直到您尝试请求数据并且我假设因为它无法从缓存中获取数据,它在线检查但它不认为它在线或smth。
    • 我猜测了问题所在,因为如果没有 minimal repro 就无法确定我们可以运行。如果我当前形式的回答不能帮助您解决问题,请编辑您的问题以显示这样一个最小的重现。
    • dw 刚刚解决。它
    • 对她好@scebab ? --- 你能在答案中写下你的解决方案,以便其他人可以从中受益吗?
    • 我只是从头开始创建了一个新的 Firebase 应用程序,使用了 android xml 并编辑了 firebase 网站上显示的所有内容。不知何故,下次我添加了一次然后他们删除了它:/
    猜你喜欢
    • 2022-06-26
    • 2021-06-03
    • 2022-01-18
    • 2019-11-10
    • 2020-07-11
    • 1970-01-01
    • 2017-12-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多