FirebaseApp не инициализируется, несмотря на то, что FirebaseApp.initializeApp() вызывается в классе Application

Я создаю приложение для Android, и в настоящее время я пытаюсь реализовать аутентификацию пользователей с помощью Firebase. Насколько я могу судить, мое приложение подключено к моему серверу Firebase.

Я сталкиваюсь с ошибкой во время выполнения при попытке перейти от действия SignIn к активности SignUp с помощью нажатия кнопки. Приложение завершилось сбой, и я столкнулся с ошибкой во время выполнения.

Насколько я могу судить, ошибка времени выполнения связана с вызовом активности ActiveSpage onCreate(), когда я пытаюсь инициализировать объект FirebaseAuth с помощью FirebaseAuth.getInstance(). Этот вызов завершился неудачно из-за

java.lang.IllegalStateException: Default FirebaseApp is not initialized in this process seniordesign.phoneafriend. Make sure to call FirebaseApp.initializeApp(Context).

Однако, я делаю этот вызов в моем методе класса onCreate(), который, как я думал, будет в порядке. Я добавил вызов initalizeApp() к вызову SignUp onCreate(), но не кубик. Я искал других с этой проблемой, но не нашел ничего подобного. Спасибо за любую помощь.

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="seniordesign.phoneafriend">
    <uses-permission android:name="android.permission.INTERNET" />
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme"
        android:name="seniordesign.phoneafriend.PhoneAFriend">
        <activity android:name=".SignIn">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".SignUp"></activity>
    </application>

</manifest>

PhoneAFriend.java(класс моего приложения)

public class PhoneAFriend extends Application {

    public void onCreate(){
        super.onCreate();
        Firebase.setAndroidContext(this);
        FirebaseApp.initializeApp(this);
    }
}

SignUp.java

public class SignUp extends AppCompatActivity {
    protected Firebase ref;
    protected EditText emailText;
    protected EditText passText;
    protected EditText confirmText;
    protected Button button;
    protected SignUp thisContext;

    protected FirebaseAuth auth;
    protected FirebaseAuth.AuthStateListener authListener;
    private View.OnClickListener onClickListener;

    public static Intent intent;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_signup);
        ref = new Firebase("https://phoneafriend-7fb6b.firebaseio.com");
        emailText = (EditText) findViewById(R.id.signup_emailText);
        passText = (EditText) findViewById(R.id.signup_passwordText);
        confirmText = (EditText) findViewById(R.id.signup_passwordConfirm);
        intent = new Intent(this, SignIn.class);
        //Tried this already
        //FirebaseApp.initializeApp(this);
        auth = FirebaseAuth.getInstance();


        button = (Button) findViewById(R.id.signup_button);
        onClickListener = new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                createUser(view);
                Log.v("SignUp Button" , "Clicked; Attempting to create user");
            }
        };
        button.setOnClickListener(onClickListener);

        authListener = new FirebaseAuth.AuthStateListener() {
            @Override
            public void onAuthStateChanged( FirebaseAuth firebaseAuth) {
                FirebaseUser user = firebaseAuth.getCurrentUser();
                if (user != null) {
                    // User is signed in
                    Log.d("FirebaseAuth", "onAuthStateChanged:signed_in:" + user.getUid());
                } else {
                    // User is signed out
                    Log.d("FirebaseAuth", "onAuthStateChanged:signed_out");
                }
                // ...
            }
        };
        thisContext = this;

    }
    @Override
    public void onStart(){
        super.onStart();
        //auth.addAuthStateListener(authListener);
    }

    @Override
    public void onStop(){
        super.onStop();
        if(authListener != null) {
            //auth.removeAuthStateListener(authListener);
        }
    }

    protected void createUser(View view){
        String cString = null;
        String pString = null;
        String eString  = emailText.getText().toString();
        if(passText.getText() != null && confirmText.getText() != null) {
            pString = passText.getText().toString();
            cString = confirmText.getText().toString();
            Log.v("SignUP: Pass Null check" , "Pass" );
            if (emailText.getText() != null && pString.equals(cString) && passText.getText() != null) {
                Log.v("SignUP: Sign up check " , "Pass");
                auth.createUserWithEmailAndPassword(emailText.getText().toString() , passText.getText().toString())
                        .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                            @Override
                            public void onComplete(@NonNull Task<AuthResult> task) {
                                Log.v("createUser complete" , "status: " + task.isSuccessful());
                                if(task.isSuccessful()){
                                    startActivity(SignUp.intent);
                                }
                            }

                        });

            }
        }

        return;
    }
}

Ответ 1

Как и указывалось в qbix, вы часто используете вызовы API от той версии, которую собираетесь использовать. Если возможно, вы должны использовать более новый API, потому что он определенно будет поддерживаться в будущем.

Смотрите документы здесь:

https://firebase.google.com/docs/database/android/start/

Удалить:

Firebase.setAndroidContext(this);
FirebaseApp.initializeApp(this);

И положи:

FirebaseDatabase database = FirebaseDatabase.getInstance();

Если qbix помещает свой комментарий в ответ, вы должны принять его, а не мое видение того, как он избил меня за несколько минут.

Также:

Если вы используете старую пожарную базу и нуждаетесь в помощи по переключению, это руководство незамедлительно поможет вам с переключением. Это довольно простой переключатель.

https://firebase.google.com/support/guides/firebase-android

Ответ 2

Я знаю, что уже есть принятый ответ. Однако я столкнулся с тем же сообщением об ошибке: java.lang.IllegalStateException: Default FirebaseApp is not initialized in this process (name). Make sure to call FirebaseApp.initializeApp(Context). Я попробовал несколько решений, найденных в SO, и дважды проверял все, пока не обнаружил, что имя пакета, определенное в Firebase Console, не соответствует имени пакета, определенному в моем файле манифеста.

Попробуйте перейти на консоль Firebase → Настройки проекта → проверьте, соответствуют ли имена пакетов.

Надеюсь, это может помочь некоторым:)

Ответ 3

Легче использовать мастер Firebase, который включен в Android Studio: он добавляет все зависимости в файлах gradle, при необходимости создает проект firebase, подключает приложение к проекту и т.д.

В Android Studio откройте меню Инструменты /Firebase и следуйте инструкциям.

Затем FirebaseApp.initializeApp() вернет действительное значение.

Ответ 4

Сначала проверьте документацию Firebase и инструменты

Android Studio → Инструменты → Firebase → Облачные сообщения.

Даже если вы сделали это раньше.

Видишь это, то и это.

Опять же, даже если вы уже сделали это до того, как версии Firebase, как правило, требуют обновленной конфигурации JSON.

Ответ 5

После многих разочарований включение разрешений в Интернете устранило эту проблему для меня.

Ответ 6

Обновление classpath 'com.google.gms:google-services:4.1.0' до classpath 'com.google.gms:google-services:4.2.0' в проекте Gradle мне помогло.

Ответ 7

Обновление 2019: если вы обновляете свои зависимости Firebase до последней версии, вам также следует обновить Google play services.

Во время написания этого ответа я обновил все свои Firebase до версии 17.0. +, Но мой сервис Google play все еще указывал на 4.1.0.

Обновление версии службы воспроизведения до 4.3.0 (Последняя версия) исправило это для меня.

enter image description here

Ответ 8

Я столкнулся с этой проблемой после того, как удалил и повторно клонировал свое приложение и забыл включить google-services.json в модуль приложения. После того, как я снова добавил это, проблема ушла. Тем не менее, вы должны инициировать контекст внутри вашего пользовательского класса Application:

class MyApplication : Application() {
    override fun onCreate() {
        super.onCreate()
        FirebaseApp.initializeApp(this)
    }
}
<manifest 
    package="your.app">

    <application
        android:name=".MyApplication"