2015-07-09 108 views
1

我在eclipse上有一個項目,現在我嘗試添加這個項目Google Analystics,但是當我添加多個代碼時,我的MainActivity應用程序崩潰。Android - Google Analytics崩潰

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); 
    } 
} 

我不明白爲什麼它總是崩潰。

+1

Eclipse?請升級。谷歌分析v4?請升級。 –

回答

1

您應仔細閱讀您的堆棧跟蹤:

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指向您的班級,see docs)。在結果中,默認Application被您的應用程序使用,而不是您的類,並且由於您無法將父類轉換爲子類,轉換異常只是此結果。

+0

謝謝,我明白我修好了:) – ZgrKARALAR