Android 名为[DEFAULT]的FirebaseApp不';不存在获取错误

Android 名为[DEFAULT]的FirebaseApp不';不存在获取错误,android,firebase,android-service,Android,Firebase,Android Service,嗨,我正在尝试获取Android后台服务的数据。但我得到了这个错误。这是我的密码: public class FirebaseBackgroundService extends Service { FirebaseDatabase database = FirebaseDatabase.getInstance(); private ValueEventListener handler; DatabaseReference myRef = database.getRefe

嗨,我正在尝试获取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)
java.lang.IllegalStateException:名为[DEFAULT]的FirebaseApp不存在。
位于android.app.ActivityThread.handleCreateService(ActivityThread.java:2862)
位于android.app.ActivityThread.-wrap4(ActivityThread.java)
在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1427)
位于android.os.Handler.dispatchMessage(Handler.java:102)
位于android.os.Looper.loop(Looper.java:148)
位于android.app.ActivityThread.main(ActivityThread.java:5417)
位于java.lang.reflect.Method.invoke(本机方法)
在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run上(ZygoteInit.java:726)
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
原因:java.lang.IllegalStateException:名为[DEFAULT]的FirebaseApp不存在。
位于com.google.firebase.FirebaseApp.getInstance(未知源)
位于com.google.firebase.FirebaseApp.getInstance(未知源)
位于com.google.firebase.database.FirebaseDatabase.getInstance(未知源)
位于bagga2.example.com.liiv.services.FirebaseBackgroundService。(FirebaseBackgroundService.java:30)
位于java.lang.Class.newInstance(本机方法)
位于android.app.ActivityThread.handleCreateService(ActivityThread.java:2859)
位于android.app.ActivityThread.-wrap4(ActivityThread.java)
在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1427)
位于android.os.Handler.dispatchMessage(Handler.java:102)
位于android.os.Looper.loop(Looper.java:148)
位于android.app.ActivityThread.main(ActivityThread.java:5417)
位于java.lang.reflect.Method.invoke(本机方法)
在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run上(ZygoteInit.java:726)
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

在生命周期回调中实例化对象

FirebaseDatabase database;
private ValueEventListener handler;
DatabaseReference myRef;

@Override
public void onCreate() {
    database = FirebaseDatabase.getInstance();
    myRef = database.getReference("chats");
    // etc.
}
请确保您已经并且已经添加了以下行:

apply plugin: 'com.google.gms.google-services'
在应用程序级别
build.gradle
文件的底部。然后重建项目,这解决了我的问题。

根据,我使用的服务不需要它,但当我将SHA-1调试密钥添加到应用程序的在线设置中时,这个问题得到了解决。单击设置工具->项目设置。然后在底部添加SHA1。请参阅以获取调试SHA1指纹

如果您的组件(最有可能的服务)不在应用程序的默认进程中,您必须手动初始化
FirebaseApp
,如下所示:

FirebaseApp.initializeApp(context, FirebaseOptions.fromResource(context));
在访问任何其他Firebase API之前执行此操作

实施背景 每个进程都实例化自己的一组类。例如,每个进程都有自己的
应用程序
对象。因此,
应用程序
是一个进程中的单例

默认流程中的
FirebaseApp
通过
FirebaseInitProvider
类初始化,该类是仅在默认流程中的应用程序启动时创建的
ContentProvider
。(清单中的
元素将自动合并。)

请注意,
元素属性
android:multiprocess=“true”
将无效,因为提供者本身没有希望与之交互的客户端

示例#1:Init Everywhere 如果你想在你的应用程序中的任何地方访问
FirebaseApp
,一个放置init代码的明显位置就是你的
应用程序

try {
    FirebaseApp.getInstance()
} catch (IllegalStateException ex) {
    FirebaseApp.initializeApp(context, FirebaseOptions.fromResource(context));
}
我说“明显”不是“好”。我不知道这对单个Firebase服务(如崩溃报告)有何影响,也不知道即使在不需要Firebase的流程中,此操作的资源强度有多大

示例2:应用程序小部件(仅在需要时初始化)
根据需要,您可以在配置活动中创建小部件UI,也可以通过接收
onUpdate
回调来创建小部件UI。这意味着您可能需要在这两个位置访问
FirebaseApp
。因此,在访问firebase之前,在这两个版本中调用示例#1中的代码。

我可能会迟到,但你必须将此添加到你的
应用程序中

apply plugin: 'com.google.gms.google-services'


在您的项目级别升级。

请检查您的项目中是否添加了google-services.json文件,如果没有,请添加它并重建项目。

包括错误,即loggedI有相同的问题,在他们更新sdk之前似乎没有任何帮助。如果您仍然面临此问题,请更新到sdk 9.2.1,其中已解决此问题。我尝试过。仍然有相同的错误。但是相同的方法在其他类上运行,而不是在服务类上。我遇到了相同的问题,这里似乎没有任何帮助。如果组件不在应用程序默认进程中,为什么我们必须专门初始化Firebase。在默认应用程序进程的情况下会发生什么。在这种情况下,Firebase在何处初始化?感谢提供详细信息。当我试图在主屏幕上托管应用程序的小部件,而我的应用程序中的小部件在其自己的进程上运行时,我也面临同样的问题。如果可能,请让我知道通过小部件初始化FirebaseApp的最佳位置。我无法在自定义应用程序类中初始化它,因为对于应用程序,它会自动由FireBaseInitProvider初始化。如果我在自定义应用程序类中添加以下代码,则会出现任何问题:if(FirebaseApp.getApps(this.isEmpty()){FirebaseApp.initializeApp(mContext,FirebaseOptions.fromResource(mContext))}@SagarTrehan初始化firebase到处都是浪费。只有在你真正需要的时候才去做。请参阅更新答案中的示例#2。感谢您的帮助。我正在尝试这个,如果有任何问题,我会让你知道
classpath 'com.google.gms:google-services:3.0.0'