在Android中,请确保首先调用FirebaseApp.initializeApp(Context)。

8 浏览
0 Comments

在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);
            }
        });
    }
}

0
0 Comments

在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检查。

0
0 Comments

问题的出现原因是使用了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。

0
0 Comments

问题的出现原因:

在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"的问题。

0