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"