Firebase.setAndroidContext() 函数放在哪里

Where to put Firebase.setAndroidContext() function

我正在尝试使用 Firebase 和 Android。
我有一个 RegisterActivity,还有一个 MainActivity。 我当前的流程是 - 从 MainActivity 开始 - 检查用户是否已注册,如果没有,请调用 RegisterActivity - 注册后调用 MainActivity.

我不知道在哪里打 Firebase.setAndroidContext() 电话。
我有 2 个问题:

  1. 我应该只在 Application 中调用此函数一次还是在每个 Activty 中调用一次?
  2. 如果问题 1 的答案只有一次,那我应该把它放在哪里?

谢谢大家, 乔拉

正如在 Firebase 的 sample applications 中看到的那样,您应该将它放在 Application 中。

package com.firebase.androidchat;

import com.firebase.client.Firebase;

/**
 * @author Jenny Tong (mimming)
 * @since 12/5/14
 *
 * Initialize Firebase with the application context. This must happen before the client is used.
 */
public class ChatApplication extends android.app.Application {
    @Override
    public void onCreate() {
        super.onCreate();
        Firebase.setAndroidContext(this);
    }
}

Source


Firebase.getAndroidContext()

设置应用程序上下文后,您可以在任何需要的地方使用它。您可以随时随地检索它。 我还建议使用 Firebase.getAndroidContext() 而不是将其存储到变量中以防止 MemoryLeaks

我不知道 FireBase 但我知道 Android.. Context 是有关应用程序环境的全局信息。你的 ActivityContext 所以我很确定 Firebase.getAndroidContext() 检索你的应用程序 Context 这是 getApplicationContext(),因为这似乎是明智的。

Should I only call this function once in Application or once in each Activty?

每当您需要 Context 关于 FireBase 代码时调用它 - 但我认为如果您在 Application class

中调用它最适合

If the answer for question 1 is only once, then where should I put it ?

如果不是一次怎么办?你在哪里称呼它?我想您会在需要的任何地方调用它 Context 对吧?不管问题 1 的答案如何,都这样做,但您可以随时 Class.thisgetBaseContext()View.getContext()

引用 Firebase quickstart documentation 的(第 4 步):

The Firebase library must be initialized once with an Android Context. This must happen before any Firebase reference is created or used.

创建MyApplication.java:

public class MyApplication extends android.app.Application {

    @Override
    public void onCreate() {
        super.onCreate();

        //Previous versions of Firebase
        Firebase.setAndroidContext(this);

        //Newer version of Firebase
        if(!FirebaseApp.getApps(this).isEmpty()) {
            FirebaseDatabase.getInstance().setPersistenceEnabled(true);
        }
    }
}

并在 AndroidManifest.xml:

中更新 name 参数值
<application 
        android:label="@string/app_name"
        android:name=".MyApplication">
...
</application>

在新的 SDK 中,不再需要调用 Firebase.setAndroidContext(),因此您可以将其从代码中删除。

您可以在此处阅读有关更新和更改的信息: https://firebase.google.com/support/guides/firebase-android

两者都可以。如果你只设置一次,那么它应该在这里。在其他任何地方,您的应用程序都会崩溃。调试器会说你没有设置AndroidContext():

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Firebase.setAndroidContext(this);
// The rest of your code goes here

如果您想用于多个活动,请创建一个与应用程序同名的 class,确保 class 扩展应用程序。

public class NameOfApp extends Application {

@Override
public void onCreate() {
    super.onCreate();

    Firebase.setAndroidContext(this);
}

}

之后,使用以下内容更新 manifest.xml 文件中的应用程序标签:

android:name=".NameOfApp"

Firebase.setAndroidContext(this); 代码替换为 mRef = FirebaseDatabase.getInstance().getReference();

并在 onCreate 方法之前添加 private DatabaseReference mRef;

我希望这适用于 Android Studio 3.5 版本。