Firebase.setAndroidContext() 函数放在哪里
Where to put Firebase.setAndroidContext() function
我正在尝试使用 Firebase 和 Android。
我有一个 RegisterActivity
,还有一个 MainActivity
。
我当前的流程是 - 从 MainActivity
开始 - 检查用户是否已注册,如果没有,请调用 RegisterActivity
- 注册后调用 MainActivity
.
我不知道在哪里打 Firebase.setAndroidContext()
电话。
我有 2 个问题:
- 我应该只在
Application
中调用此函数一次还是在每个 Activty
中调用一次?
- 如果问题 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);
}
}
Firebase.getAndroidContext()
设置应用程序上下文后,您可以在任何需要的地方使用它。您可以随时随地检索它。
我还建议使用 Firebase.getAndroidContext()
而不是将其存储到变量中以防止 MemoryLeaks
我不知道 FireBase 但我知道 Android.. Context
是有关应用程序环境的全局信息。你的 Activity
是 Context
所以我很确定 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.this
、 getBaseContext()
或 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 版本。
我正在尝试使用 Firebase 和 Android。
我有一个 RegisterActivity
,还有一个 MainActivity
。
我当前的流程是 - 从 MainActivity
开始 - 检查用户是否已注册,如果没有,请调用 RegisterActivity
- 注册后调用 MainActivity
.
我不知道在哪里打 Firebase.setAndroidContext()
电话。
我有 2 个问题:
- 我应该只在
Application
中调用此函数一次还是在每个Activty
中调用一次? - 如果问题 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);
}
}
Firebase.getAndroidContext()
设置应用程序上下文后,您可以在任何需要的地方使用它。您可以随时随地检索它。
我还建议使用 Firebase.getAndroidContext()
而不是将其存储到变量中以防止 MemoryLeaks
我不知道 FireBase 但我知道 Android.. Context
是有关应用程序环境的全局信息。你的 Activity
是 Context
所以我很确定 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.this
、 getBaseContext()
或 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
:
<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 版本。