繁体   English   中英

Android-Google Analytics(分析)崩溃了

[英]Android - Google Analytics Crashed

我现在在eclipse上有一个项目,我尝试将这个项目添加到Google Analystics,但是当我添加多数民众赞成在代码时,我的MainActivity应用程序崩溃。

  Tracker t = ((AnalyticsSampleApp)this.getApplication()).getTracker(TrackerName.APP_TRACKER);
  t.setScreenName("HomePage");
  t.send(new HitBuilders.AppViewBuilder().build());

logcat的

07-10 00:59:35.352: E/AndroidRuntime(9968): FATAL EXCEPTION: main
07-10 00:59:35.352: E/AndroidRuntime(9968): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.interrail.railrehber/com.interrail.railrehber.MainActivity}: java.lang.ClassCastException: android.app.Application cannot be cast to com.interrail.railrehber.AnalyticsSampleApp
07-10 00:59:35.352: E/AndroidRuntime(9968):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)
07-10 00:59:35.352: E/AndroidRuntime(9968):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
07-10 00:59:35.352: E/AndroidRuntime(9968):     at android.app.ActivityThread.access$600(ActivityThread.java:141)
07-10 00:59:35.352: E/AndroidRuntime(9968):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
07-10 00:59:35.352: E/AndroidRuntime(9968):     at android.os.Handler.dispatchMessage(Handler.java:99)
07-10 00:59:35.352: E/AndroidRuntime(9968):     at android.os.Looper.loop(Looper.java:137)
07-10 00:59:35.352: E/AndroidRuntime(9968):     at android.app.ActivityThread.main(ActivityThread.java:5041)
07-10 00:59:35.352: E/AndroidRuntime(9968):     at java.lang.reflect.Method.invokeNative(Native Method)
07-10 00:59:35.352: E/AndroidRuntime(9968):     at java.lang.reflect.Method.invoke(Method.java:511)
07-10 00:59:35.352: E/AndroidRuntime(9968):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
07-10 00:59:35.352: E/AndroidRuntime(9968):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
07-10 00:59:35.352: E/AndroidRuntime(9968):     at dalvik.system.NativeStart.main(Native Method)
07-10 00:59:35.352: E/AndroidRuntime(9968): Caused by: java.lang.ClassCastException: android.app.Application cannot be cast to com.interrail.railrehber.AnalyticsSampleApp
07-10 00:59:35.352: E/AndroidRuntime(9968):     at com.interrail.railrehber.MainActivity.onCreate(MainActivity.java:143)
07-10 00:59:35.352: E/AndroidRuntime(9968):     at android.app.Activity.performCreate(Activity.java:5207)
07-10 00:59:35.352: E/AndroidRuntime(9968):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
07-10 00:59:35.352: E/AndroidRuntime(9968):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
07-10 00:59:35.352: E/AndroidRuntime(9968):     ... 11 more

AnalyticsSampleApp页面代码为

package com.interrail.railrehber;

import android.app.Application;
import com.google.android.gms.analytics.GoogleAnalytics;
import com.google.android.gms.analytics.Tracker;

import java.util.HashMap;

public class AnalyticsSampleApp extends Application {

// The following line should be changed to include the correct property id.
private static final String PROPERTY_ID = "UA-56237196-12";

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.
}

public HashMap<TrackerName, Tracker> mTrackers = new HashMap<TrackerName, Tracker>();

public AnalyticsSampleApp() {
    super();
}

public synchronized Tracker getTracker(TrackerName trackerId) {
    if (!mTrackers.containsKey(trackerId)) {
        GoogleAnalytics analytics = GoogleAnalytics.getInstance(this);
        Tracker t = (trackerId == TrackerName.APP_TRACKER) ? analytics.newTracker(PROPERTY_ID): (trackerId == TrackerName.GLOBAL_TRACKER) ? analytics.newTracker(R.xml.global_tracker): analytics.newTracker(R.xml.ecommerce_tracker);
        mTrackers.put(trackerId, t);

    }
    return mTrackers.get(trackerId);
  }
}

我不明白为什么它总是崩溃。

您应该仔细阅读堆栈跟踪:

Caused by: java.lang.ClassCastException: android.app.Application cannot be cast to com.interrail.railrehber.AnalyticsSampleApp

在您的情况下,这意味着在此行中:

Tracker t = ((AnalyticsSampleApp)this.getApplication()).getTracker(TrackerName.APP_TRACKER);

getApplication()返回Application对象,而不是AnalyticsSampleApp 这很可能是由于清单中<application>缺少对AnalyticsSampleApp引用引起的(您需要android:name指向您的类, 请参阅docs )。 结果,您的应用Application将使用默认的Application而不是您的类,并且由于无法将父类强制转换为子类,因此强制转换异常只是这种情况的结果。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM