gpt4 book ai didi

android - 名称为 [DEFAULT] 的 FirebaseApp 不存在并出现错误

转载 作者:太空宇宙 更新时间:2023-11-03 11:47:44 25 4
gpt4 key购买 nike

您好,我正在尝试获取有关 Android 后台服务的数据。但是我收到了这个错误。这是我的代码:

public class FirebaseBackgroundService extends Service {

FirebaseDatabase database = FirebaseDatabase.getInstance();
private ValueEventListener handler;
DatabaseReference myRef = database.getReference("chats");

@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}

@Override
public void onCreate() {
super.onCreate();

handler = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
postNotify(dataSnapshot.getValue().toString());
}

@Override
public void onCancelled(DatabaseError databaseError) {

}
};
myRef.addValueEventListener(handler);
}
}

堆栈跟踪:

java.lang.IllegalStateException: FirebaseApp with name [DEFAULT] doesn't exist. 
at android.app.ActivityThread.handleCreateService(ActivityThread.java:2862)
at android.app.ActivityThread.-wrap4(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1427)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

Caused by: 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.database.FirebaseDatabase.getInstance(Unknown Source)
at bagga2.example.com.liiv.services.FirebaseBackgroundService.<init>(FirebaseBackgroundService.java:30)
at java.lang.Class.newInstance(Native Method)
at android.app.ActivityThread.handleCreateService(ActivityThread.java:2859)
at android.app.ActivityThread.-wrap4(ActivityThread.java) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1427) 
at android.os.Handler.dispatchMessage(Handler.java:102) 
at android.os.Looper.loop(Looper.java:148) 
at android.app.ActivityThread.main(ActivityThread.java:5417) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

最佳答案

如果您的组件(很可能是服务)不存在于应用程序的默认进程中,您必须手动初始化 FirebaseApp像这样:

FirebaseApp.initializeApp(context, FirebaseOptions.fromResource(context));

在访问任何其他 Firebase API 之前执行此操作。

实现背景

每个进程实例化自己的一组类。例如,您的每个进程都有自己的 Application目的。因此Application是单例在一个进程中

FirebaseApp默认进程通过FirebaseInitProvider初始化类是 ContentProvider在应用程序启动时创建的 仅在默认进程中。 ( list 中的 <provider> 元素自动合并。)

请注意 <provider>元素属性 android:multiprocess="true"不会有任何效果,因为提供者本身没有想要与之交互的客户。

示例#1:到处初始化

如果你想访问 FirebaseApp在你的应用程序中,放置初始化代码的明显位置是你的 Application类。

try {
FirebaseApp.getInstance()
} catch (IllegalStateException ex) {
FirebaseApp.initializeApp(context, FirebaseOptions.fromResource(context));
}

我说的是“明显”而不是“好”。我不知道这对单个 Firebase 服务(例如崩溃报告)有何影响,或者即使在您不需要 Firebase 的进程中执行此操作也会占用多少资源。

示例 #2:应用小部件(仅在需要时初始化)

根据 AppWidgetProvider docs 您要么在配置 Activity 中创建小部件 UI,要么通过接收 onUpdate打回来。这意味着您可能需要访问 FirebaseApp在这两个地方。因此,在访问 firebase 之前,请在两者中调用示例 #1 中的代码。

关于android - 名称为 [DEFAULT] 的 FirebaseApp 不存在并出现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37531749/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com