Обязательно сначала вызовите FirebaseApp.initializeApp(Context) в Android
Я столкнулся с этой проблемой и видел некоторые ответы на этом сайте, но не нашел правильного решения.
Я использовал предыдущую версию Firebase
, которая прекрасно работает, но когда я пытаюсь обновить с помощью Upgradeation и обновить класс Firebase
до DatabaseReference
, он показывает ошибку и не работает.
Я добавляю в свой файл манифеста весь код, поэтому, пожалуйста, помогите мне решить эту проблему.
Вот мой manifest
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="firebasechat.com.firebasechat">
<uses-permission android:name="android.permission.INTERNET" />
<application
android:allowBackup="true"
android:name=".Activity.SimpleBlog"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".Activity.RegisterActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
мой Module app
указан ниже.
apply plugin: 'com.android.application'
android {
compileSdkVersion 26
buildToolsVersion "26.0.0"
defaultConfig {
applicationId "firebasechat.com.firebasechat"
minSdkVersion 15
targetSdkVersion 26
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
multiDexEnabled true
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
packagingOptions {
exclude 'META-INF/LICENSE'
exclude 'META-INF/LICENSE-FIREBASE.txt'
exclude 'META-INF/NOTICE'
}
}
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:26.+'
compile 'com.android.volley:volley:1.0.0'
compile "com.google.firebase:firebase-database:11.0.0"
compile 'com.google.android.gms:play-services:11.0.0'
compile 'com.android.support:recyclerview-v7:25.0.0'
testCompile 'junit:junit:4.12'
testCompile 'junit:junit:4.12'
}
и Project gradle
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.3.3'
classpath 'com.google.gms:google-services:4.2.0'// Updated version of google service
}
}
allprojects {
repositories {
jcenter()
maven {
url "https://maven.google.com" // Google Maven repository
}
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
Ниже мой Activity
.
public class RegisterActivity extends AppCompatActivity {
EditText username, password;
Button registerButton;
String user, pass;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_register);
username = (EditText)findViewById(R.id.username);
password = (EditText)findViewById(R.id.password);
registerButton = (Button)findViewById(R.id.registerButton);
FirebaseApp.initializeApp(this);
registerButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
user = username.getText().toString();
pass = password.getText().toString();
final ProgressDialog pd = new ProgressDialog(RegisterActivity.this);
pd.setMessage("Loading...");
pd.show();
String url = "https://pure-coda-174710.firebaseio.com/users.json";
StringRequest request = new StringRequest(Request.Method.GET, url, new Response.Listener<String>(){
@Override
public void onResponse(String s) {
// Firebase reference = new Firebase("https://pure-coda-174710.firebaseio.com/users");
DatabaseReference reference = FirebaseDatabase.getInstance()
.getReferenceFromUrl("https://pure-coda-174710.firebaseio.com/users");
if(s.equals("null")) {
reference.child(user).child("password").setValue(pass);
Toast.makeText(RegisterActivity.this, "registration successful", Toast.LENGTH_LONG).show();
}
else {
try {
JSONObject obj = new JSONObject(s);
if (!obj.has(user)) {
reference.child(user).child("password").setValue(pass);
Toast.makeText(RegisterActivity.this, "registration successful", Toast.LENGTH_LONG).show();
} else {
Toast.makeText(RegisterActivity.this, "username already exists", Toast.LENGTH_LONG).show();
}
} catch (JSONException e) {
e.printStackTrace();
}
}
pd.dismiss();
}
},new Response.ErrorListener(){
@Override
public void onErrorResponse(VolleyError volleyError) {
System.out.println("" + volleyError );
pd.dismiss();
}
});
RequestQueue rQueue = Volley.newRequestQueue(RegisterActivity.this);
rQueue.add(request);
}
});
}
}
Ответы
Ответ 1
В своем классе приложения SimpleBlog
инициализируйте FirebaseApp в методе onCreate()
и удалите его из RegisterActivity
, чтобы Firebase инициализировалась во целом приложении, а не только в одном Activity.
@Override
public void onCreate() {
super.onCreate();
FirebaseApp.initializeApp(this);
}
Также добавьте apply plugin: 'com.google.gms.google-services'
в конце приложения:
dependencies {
....
}
apply plugin: 'com.google.gms.google-services'
Плагин необходим для обработки конфигурации json из firebase и во избежание коллизий зависимостей. Вы можете прочитать здесь для более подробной информации.
Ответ 2
Потратил буквально целый день. Наконец, это было решение.
Freaking 0 вместо 1, и вам не придется использовать инициализировать firebaseapp или что-то в этом роде.
В Project gradle используйте сервисы Google: 4.0.0, а не 4.1.0.
Кроме того, применять плагин в конце также не является необходимым в моем опыте.
(Надеемся, что вы добавили базу данных Firebase из Tools => Firebase Assistant. Шаг 1 и шаг 2 справа и зеленый.)
Ответ 3
Получил такую же проблему и решил так:
в деятельности:
@Override
public void onCreate() {
super.onCreate();
FirebaseApp.initializeApp(this);
}
в приложении gradle (в конце файла):
dependencies {
....
}
apply plugin: 'com.google.gms.google-services'
это проектная градация:
dependencies {
classpath 'com.android.tools.build:gradle:3.0.1'
classpath 'com.google.gms:google-services:3.0.0'
}
Ответ 4
Согласно документации FirebaseApp, вам не нужно вызывать эту инициализацию, за исключением того, что вашему приложению требуется доступ к другому проекту Firebase.
Я вызвал эту инициализацию, и иногда пользователь время от времени получает сбой, когда пользователь открывает мое приложение, поэтому я удаляю эту строку кода, тогда все работает хорошо. Будьте осторожны, чтобы вызвать эту инициализацию.
Захват документации FirebaseApp:
Обновление: ниже Исключение произойдет, если вы попытаетесь добавить эту строку [Некоторые рекламные сети требуют эту строку, они также добавляют некоторый процесс в свой AndroidManifest
]
Не удалось получить эксклюзивную блокировку для постоянного клиента клиента Firestore. Как правило, это означает, что вы используете Firestore из нескольких процессов в вашем приложении. Помните, что многопроцессорные приложения Android выполняют код в вашем классе Application во всех процессах, поэтому вам может потребоваться избежать инициализации Firestore в вашем классе Application. Если вы намеренно используете Firestore из нескольких процессов, вы можете включить автономную постоянную работу (то есть вызвать setPersistenceEnabled (true)) только в одном из них.
Починить это:
1) добавить метод ниже в вашем классе Application
:
private boolean isMainProcess(Context context) {
if (null == context) {
return true;
}
ActivityManager manager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
int pid = android.os.Process.myPid();
for (ActivityManager.RunningAppProcessInfo processInfo : manager.getRunningAppProcesses()) {
String name = processInfo.processName;
if (!StringUtils.isEmpty(name) && pid == processInfo.pid && name.equals(APPLICATION_ID)) {
return true;
}
}
return false;
}
2) onCreate
создания вашего Application
@Override
public void onCreate() {
super.onCreate();
if (!isMainProcess(this)) {
FirebaseApp.initializeApp(this);
FirebaseFirestoreSettings settings = new FirebaseFirestoreSettings.Builder()
.setPersistenceEnabled(false)
.build();
FirebaseFirestore.getInstance().setFirestoreSettings(settings);
// other things
return;
}
// other things
}
ОБНОВЛЕНИЕ: Иногда мое приложение выдает ниже исключения
Невозможно создать приложение. My Application Class: java.lang.IllegalStateException: по умолчанию FirebaseApp не инициализируется в этом процессе MY_APPLICATION_ID. Не забудьте сначала вызвать FirebaseApp.initializeApp(Context).
Чтобы исправить это: давайте обновим метод onCreate
:
@Override
public void onCreate() {
super.onCreate();
FirebaseApp.initializeApp(this);
boolean isMain = isMainProcess(this);
FirebaseFirestoreSettings settings = new FirebaseFirestoreSettings.Builder().setPersistenceEnabled(isMain).build();
FirebaseFirestore.getInstance().setFirestoreSettings(settings);
if (!isMain) {
// other things
return;
}
// other things
}
Ответ 5
-
У меня была такая же проблема некоторое время назад.
Вы пытаетесь получить экземпляр Firebase без его инициализации. Пожалуйста, добавьте эту строку кода, прежде чем пытаться получить экземпляр Firebase:
Просто импортируйте последнюю версию Firebase и сервисы Google Play.
Последняя версия обновления (пример):
добавить к этим строкам build.gradle
dependencies {
implementation 'com.google.firebase:firebase-messaging:17.3.4'
implementation 'com.google.firebase:firebase-core:16.0.7'
implementation 'com.firebase:firebase-jobdispatcher:0.8.5'
}
apply plugin: 'com.google.gms.google-services'
dependencies {
classpath 'com.android.tools.build:gradle:3.3.1'
classpath 'com.google.gms:google-services:4.2.0'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
это все. Наслаждайтесь вашим кодированием.
Ответ 6
Прежде всего: Конфигурация проекта JSON может пойти не так, как надо, устаревшей, главным образом, при обновлении Firebase.
Перейдите в Tools-> Firebase-> Cloud Messaging-> Настройте облачные сообщения firebase.
Даже если вы сделали это в прошлом, стоит дважды проверить здесь, как вещи обновляться время от времени. Я синхронизировал свой проект и решил проблему.
Что касается вызова FirebaseApp.initializeApp
, это необязательно, по крайней мере, для FCM. См. Документацию FCM.
Более того, если он возвращает значение null, это означает, что он терпит неудачу, поэтому вызов его перед вызовом getInstance
не будет выполняться.
Обратите внимание, что это getInstance of FirebaseInstanceId:
public static FirebaseInstanceId getInstance() {
return getInstance(FirebaseApp.getInstance());
}
Где, с другой стороны:
@Nullable
public static FirebaseApp initializeApp(Context var0) {
Object var1 = sLock;
synchronized(sLock) {
if (zzf.containsKey("[DEFAULT]")) {
return getInstance();
} else {
FirebaseOptions var2;
return (var2 = FirebaseOptions.fromResource(var0)) == null ? null : initializeApp(var0, var2);
}
}
}
Это означает, что если initializeApp
возвращает null
, у вас, вероятно, возникнут проблемы с конфигурациями. По крайней мере, стоит проверить. Чтобы узнать, где вы находитесь, поставьте точку останова в какой-то момент, когда отображается Context
, и попытайтесь оценить FirebaseApp.initialize(context)
чтобы убедиться, что он не возвращает значение null.
Ответ 7
У меня тоже была такая же проблема, и я заметил, что эта проблема возникла у меня только тогда, когда я добавил зависимость Firebase Storage. Так как я использую API 28, я удостоверился, что все зависимости 16.0.5
имеют одну и ту же версию импорта, т.е. 16.0.5
в зависимости от хранилища.
implementation 'com.google.firebase:firebase-core:16.0.5'
implementation 'com.google.firebase:firebase-auth:16.0.5'
implementation 'com.google.firebase:firebase-database:16.0.5'
implementation 'com.google.firebase:firebase-storage:16.0.5'
Я обновил свою версию Gradle до
classpath 'com.android.tools.build:gradle:3.3.0'
classpath 'com.google.gms:google-services:4.2.0'
И я добавил строку под модулем приложения
apply plugin: 'com.google.gms.google-services'
тогда это сработало для меня.
Ответ 8
обновите основной путь к классу gradle 'com.google.gms: google-services: 4.2.0'
Ответ 9
Пожалуйста, build.gradle
плагин сервиса Google с версии 4.1.0 до 4.0.1 в проекте build.gradle
classpath 'com.google.gms:google-services:4.0.1'
И добавьте этот код в onCreate()
FirebaseApp.initializeApp(this);
это сработало для меня.
Ответ 10
У меня была такая же проблема, я изменил свой проект build.gradle, чтобы быть следующим
dependencies {
classpath 'com.android.tools.build:gradle:3.2.1'
classpath 'com.google.gms:google-services:3.2.0'
....
}
Затем я добавил строку ниже в модуль приложения
apply plugin: 'com.google.gms.google-services'
и это было решено
Ответ 11
Не нужно ничего добавлять в класс Application или вызывать initializeApp() для firebase. После добавления возможностей Firebase в ваше приложение через Сервис → Firebase → (Любая функциональность) → Убедитесь, что шаги 1 и 2 выделены зеленым цветом и отмечены.
Перейдите в файл проекта gradle и используйте classpath 'com.google.gms:google-services:4.2.0'
это.
Ответ 12
Чтобы предотвратить эту ошибку, необходимо выполнить все шаги, связанные с настройкой Firebase для Android https://firebase.google.com/docs/android/setup
Я получил ту же ошибку, что забыл выполнить два шага и исправил ее с помощью
1) добавление classpath 'com.google.gms: google-services: 4.2.0' в файл сборки уровня проекта.
2) добавление применить плагин: 'com.google.gms.google-services' к файлу сборки Gradle уровня модуля.
Ответ 13
implementation 'com.google.firebase:firebase-core:16.0.6
Если ошибка FirebaseApp.initializeApp(Context), добавьте "mavenCentral" в ваш build.gradle
enter code here repositories {google() jcenter() mavenCentral() }
Ответ 14
Попробуйте понизить или обновить версию Gradle.
Например, ваш build.gradle имеет:
dependencies {
classpath 'com.android.tools.build:gradle:3.3.0'
}
Изменить на
dependencies {
classpath 'com.android.tools.build:gradle:3.2.0'
}
Ответ 15
Я не использовал FirebaseApp.initializeApp(Context)
в своем проекте.
Меня устраивает. Вам следует проверить файлы Gradle и убедиться, что вы реализовали следующие строки:
добавьте apply plugin: 'com.google.gms.google-services'
в ваш gradle (приложение)
или
добавьте это classpath 'com.google.gms:google-services:4.2.0'
в ваш gradle (проект).
Ответ 16
Вы столкнулись с этой ошибкой из-за обновлений Google. Все, что вам нужно, это сделать следующее
Измените следующую зависимость с
dependencies {
classpath 'com.android.tools.build:gradle:3.3.2'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
classpath 'com.google.gms:google-services:4.1.0'
}
от до
dependencies {
classpath 'com.android.tools.build:gradle:3.3.2'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
classpath 'com.google.gms:google-services:4.0.0'
}
Разница в том, что google-services: 4.1.0 следует изменить на 4.0.0
Ответ 17
Попробуйте добавить свое приложение в консоль Firebase и обновить новый файл google-services.json в своем приложении. Это сработало для меня, когда я попытался реализовать приложение с базой данных и файлом json другого проекта.
Ответ 18
эта ошибка из-за службы Google и обновлений аутентификации firebase
просто обновите их.
просто это
classpath 'com.google.gms:google-services:4.1.0'
к этому
classpath 'com.google.gms:google-services:4.2.0'
В будущем для лучшего и быстрого решения следуйте этому
Таким образом вы можете обновить как firebase-auth, так и google-сервис.
Ответ 19
используйте это в oncreate класса, где вы используете firebase.
FirebaseApp.initializeApp(Context);