从后台服务

时间:2016-09-13 08:30:34

标签: android service firebase background-process firebase-storage

我想从我的应用程序的后台服务下载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存储文件?如果是,那怎么样?如果没有,那么这个场景还有其他选择吗? 任何帮助,将不胜感激。感谢。

1 个答案:

答案 0 :(得分:2)

“这就是为什么,我想在后台下载Firebase中的所有数据,以保持我的用户界面一致。”

由于这个原因,Firebase Storage已经在后台线程上执行了下载 - 您可以在主线程上启动下载,我们将在后台获取,然后在主线程上引发回调。您没有必要创建单独的服务来执行此操作。

实时数据库也是这样做的。 Firebase的重点是防止你不得不做任何这项工作:)