所以,我按照这个(http://java.dzone.com/articles/working-google-analytics-api)教程将Google Analytics v4添加到我的应用程序中,但在我尝试运行它之后的所有内容之后,我收到的错误如下:
09-13 12:52:01.122 31624-31624/com.rivert.unlockscope E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.rivert.unlockscope, PID: 31624
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.rivert.unlockscope/com.rivert.unlockscope.unlockscope}: java.lang.ClassCastException: android.app.Application cannot be cast to com.rivert.unlockscope.MyApplication
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2187)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2236)
at android.app.ActivityThread.access$800(ActivityThread.java:138)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1199)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5034)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:611)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.ClassCastException: android.app.Application cannot be cast to com.rivert.unlockscope.MyApplication
at com.rivert.unlockscope.unlockscope.onCreate(unlockscope.java:37)
at android.app.Activity.performCreate(Activity.java:5241)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2151)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2236)
at android.app.ActivityThread.access$800(ActivityThread.java:138)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1199)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5034)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:611)
at dalvik.system.NativeStart.main(Native Method)
09-13 12:52:02.594 31624-31624/com.rivert.unlockscope I/Process﹕ Sending signal. PID: 31624 SIG: 9
第37行的代码是:
((MyApplication) getApplication()).getTracker(MyApplication.TrackerName.APP_TRACKER);
任何人都可以帮助我吗?感谢
LE
MyApplication Code
package com.rivert.unlockscope;
import android.app.Application;
import com.google.android.gms.analytics.GoogleAnalytics;
import com.google.android.gms.analytics.Tracker;
import java.util.HashMap;
/**
* Created by Coman Alexandru on 12/09/2014.
*/
public class MyApplication extends Application {
// The following line should be changed to include the correct property id.
private static final String PROPERTY_ID = "UA-XXXXXXXX-X";
//Logging TAG
private static final String TAG = "TestName";
public static int GENERAL_TRACKER = 0;
public enum TrackerName {
APP_TRACKER, // Tracker used only in this app.
GLOBAL_TRACKER, // Tracker used by all the apps from a company. eg: roll-up tracking.
ECOMMERCE_TRACKER, // Tracker used by all ecommerce transactions from a company.
}
HashMap<TrackerName, Tracker> mTrackers = new HashMap<TrackerName, Tracker>();
public MyApplication() {
super();
}
synchronized Tracker getTracker(TrackerName trackerId) {
if (!mTrackers.containsKey(trackerId)) {
GoogleAnalytics analytics = GoogleAnalytics.getInstance(this);
Tracker t = (trackerId == TrackerName.APP_TRACKER) ? analytics.newTracker(R.xml.app_tracker)
: (trackerId == TrackerName.GLOBAL_TRACKER) ? analytics.newTracker(PROPERTY_ID)
: analytics.newTracker(R.xml.ecommerce_tracker);
mTrackers.put(trackerId, t);
}
return mTrackers.get(trackerId);
}
}
我的日志:
答案 0 :(得分:1)
我之前遇到过同样的问题。您需要在清单文件中添加应用程序名称。
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:name=".MainApplication" >
</application>
答案 1 :(得分:1)
In fact, you have to set your android:name to the class you created that extends application. For example, if your class is:
public class Thisnameinmanifestconfig extends Application{
private Tracker mTracker;
synchronized public Tracker getDefaultTracker() {
if(mTracker == null){
GoogleAnalytics analytics = GoogleAnalytics.getInstance(this);
mTracker = analytics.newTracker(R.xml.global_tracker);
}
return mTracker;
}
Your manifest should be:
<application
android:name=".Thisnameinmanifestconfig"
.../>
</application>
That's it. I hope it helps.