如何在其他类中使用Firebase分析,而不是Android中的Activity类?



我们知道,我们可以使用下面的代码记录活动中的事件:

FirebaseAnalytics.getInstance(this).logEvent("hello", new Bundle());

假设我有这个类"Student",这是一个简单的类,在不同的活动中调用。我想知道的是如何使用FirebaseAnalytics在这个"学生"不传递上下文或getApplicationContext()或"this"关键字?

N。B: firebasecashlytics可用于"学生";类如下:

FirebaseCrashlytics.getInstance().log("logstudentclass");

也"Student"类:

public class Student{
private String name;
private String roll;

public Student(String name, String, roll){
this.name=name;
this.roll=roll;
}
// bla bla bla methods
// bla bla bla getters setters
}

你可以在你的Application类中实例化一个对FirebaseAnalytics的公共静态引用

public class MyApp extends Application {
public static  FirebaseAnalytics firebaseAnalytics;
@Override
public void onCreate() {
super.onCreate();
firebaseAnalytics = FirebaseAnalytics.getInstance(this);
}
}

接下来,在Application标签中添加相同的名称到Android Manifest文件:

<application
android:name=".MyApp"
...

现在您可以在Student中使用它,如:

MyApp.firebaseAnalytics.log("logsstudentclass")

您可以创建一个类,扩展Application类:

用以下代码创建一个文件MyApplication.java:

class MyApplication extends Application {
private static Application context;
public void onCreate() {
super.onCreate();
context = this;
}
public static Context getAppContext() {
return context;
}
}

该类扩展了Application类,并在应用程序的整个生命周期中存在。使用静态变量来存储Application值(您的上下文),并使用静态方法来获取它,使它可以从代码中的任何地方访问。

在你的AndroidManifest.xml -声明你想使用MyApplication类作为你的应用程序类:

<application
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:name=".MyApplication">
...
</application>

当你想获取应用程序上下文时,使用:

MyApplication.getAppContext()

In Your case:

FirebaseAnalytics
.getInstance(MyApplication.getAppContext())
.logEvent("hello", new Bundle());

关于Application类的更多信息在这里。

请注意,这种方法也有缺点,例如,试图在初始化上下文之前使用上下文,字符串翻译,更重要的是要小心使用它。

最新更新