我想从我的应用程序的后台服务下载Firebase存储上传的图像文件。我需要服务,因为数据库太大而且存储也是如此。这就是为什么我想在后台下载Firebase中的所有数据以保持我的UI一致。 Firebase数据库中的所有数据都已成功下载。但是从Firebase存储下载文件会给我带来错误。
代码:
StorageReference httpsReference = FirebaseStorage.getInstance().getReferenceFromUrl(url);
httpsReference.getBytes(1024 * 1024).addOnSuccessListener(new OnSuccessListener<byte[]>() {
@Override
public void onSuccess(byte[] bytes) {
Log.v("log_tag", "onDataChange onSuccess icon received");
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
}
});
错误:
java.lang.IllegalStateException: FirebaseApp with name [DEFAULT] doesn't exist.
at com.google.firebase.FirebaseApp.getInstance(Unknown Source)
at com.google.firebase.FirebaseApp.getInstance(Unknown Source)
at com.google.firebase.storage.FirebaseStorage.getInstance(Unknown Source) at in.co.cybercom.memorymatch.misc.WebServiceCommon.downloadImageSet(WebServiceCommon.java:133)
atin.co.cybercom.memorymatch.misc.WebServiceCommon.access$400(WebServiceCommon.java:49)
atin.co.cybercom.memorymatch.misc.WebServiceCommon$1.onDataChange(WebServiceCommon.java:91)
at com.firebase.client.Query$1.onDataChange(Query.java:158)
atcom.firebase.client.core.ValueEventRegistration.fireEvent(ValueEventRegistration.java:45)
at com.firebase.client.core.view.DataEvent.fire(DataEvent.java:45)
at com.firebase.client.core.view.EventRaiser$1.run(EventRaiser.java:38)
at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:145) at android.app.ActivityThread.main(ActivityThread.java:5951) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) atcom.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1400) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1195)
请告诉我是否可以在后台服务中下载Firebase存储文件?如果是,那怎么样?如果没有,那么这个场景还有其他选择吗? 任何帮助,将不胜感激。感谢。
答案 0 :(得分:2)
“这就是为什么,我想在后台下载Firebase中的所有数据,以保持我的用户界面一致。”
由于这个原因,Firebase Storage已经在后台线程上执行了下载 - 您可以在主线程上启动下载,我们将在后台获取,然后在主线程上引发回调。您没有必要创建单独的服务来执行此操作。
实时数据库也是这样做的。 Firebase的重点是防止你不得不做任何这项工作:)