在Android中,请确保首先调用FirebaseApp.initializeApp(Context)。
在Android中,请确保首先调用FirebaseApp.initializeApp(Context)。
我遇到了这个问题,并在这个网站上看到了一些答案,但没有得到任何正确的解决方案。
\n我之前使用的是Firebase的旧版本,它工作正常,但是当我尝试使用升级和将Firebase类更新为DatabaseReference时,它显示错误并且无法工作。
\n我添加了我的清单文件的全部代码,请帮助我解决这个问题。
\n这是我的清单文件:
\n
\n下面是我的模块app代码:
\n
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' }
\n和项目gradle:
\n
// 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's Maven repository } } } task clean(type: Delete) { delete rootProject.buildDir }
\n下面是我的Activity:
\n
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(){ @Override public void onResponse(String s) { 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); } }); } }
在Android中出现问题的原因是没有正确调用FirebaseApp.initializeApp(Context),解决方法是在Application类的onCreate方法中调用该方法,并添加一些逻辑判断和设置。
问题的原因是,调用FirebaseApp.initializeApp(Context)会导致多个进程同时使用Firestore,从而引发异常。为了解决这个问题,需要在Application类中添加一个判断是否为主进程的方法,并根据判断结果进行不同的初始化设置。
解决方法如下:
1) 在Application类中添加isMainProcess方法,用于判断是否为主进程。
2) 在Application类的onCreate方法中添加判断逻辑,如果不是主进程,则调用FirebaseApp.initializeApp(this)和其他设置;如果是主进程,则只进行其他设置。
更新后的onCreate方法代码如下:
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 }
以上是解决问题的方法,但是还可以进一步改进代码。可以用name.equals("")替换StringUtils的使用,并在使用manager之前进行null检查。
问题的出现原因是使用了Firebase的4.1.0版本,而不是正确的4.0.0版本。解决方法是在Project gradle中使用Google services的4.0.0版本,并确保在代码中调用FirebaseApp.initializeApp(Context)方法。此外,还注意到在build.gradle文件中的apply plugin语句并不是必需的。
在使用Firebase的过程中,有用户遇到了调用FirebaseApp.initializeApp(Context)的问题。他们发现,将Project gradle中的Google services版本从4.1.0更改为4.2.0后,问题得到了解决。然而,另一位用户指出,仍然需要使用Plugin: com.google.gms.google-services,并且Firebase服务将提醒用户如果没有调用Firebase.initializeApp(context)方法。
至于"Freaking 0 instead of 1"这句话的意思不明确,可能是指在build.gradle文件中将某个值设置为0。
问题的出现原因:
在Android应用程序的SimpleBlog
类中,需要在onCreate()
方法中初始化FirebaseApp,并将其从RegisterActivity
中移除,以便整个应用程序都能进行Firebase初始化,而不仅仅是一个活动。此外,还需要在app gradle的末尾添加apply plugin: 'com.google.gms.google-services'
,以处理来自Firebase的json配置并避免依赖冲突。
问题的解决方法:
1. 在SimpleBlog
类的onCreate()
方法中添加以下代码:
public void onCreate() { super.onCreate(); FirebaseApp.initializeApp(this); }
2. 在app gradle中的依赖部分末尾添加apply plugin: 'com.google.gms.google-services'
。
另外,还需要确保在根目录的build.gradle文件中的dependencies中添加classpath 'com.google.gms:google-services:3.1.0'
。
最后,如果出现版本冲突错误,可以尝试使用classpath 'com.google.gms:google-services:3.0.0'
而不是classpath 'com.google.gms:google-services:3.1.0'
。
通过以上步骤,可以解决在Android应用中出现"Make sure to call FirebaseApp.initializeApp(Context) first"的问题。