我们知道,我们可以使用下面的代码记录活动中的事件:
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类的更多信息在这里。
请注意,这种方法也有缺点,例如,试图在初始化上下文之前使用上下文,字符串翻译,更重要的是要小心使用它。