Reputation: 489
I have one project on eclipse now i'm try to add this project Google Analystics but when i'm adding thats code my MainActivity applications crashes.
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 page code is
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);
}
}
I don't understand why it's crashing always.
Upvotes: 1
Views: 194
Reputation: 75629
You should carefully read your stack trace:
Caused by: java.lang.ClassCastException: android.app.Application cannot be cast to com.interrail.railrehber.AnalyticsSampleApp
which in your case means that in this line:
Tracker t = ((AnalyticsSampleApp)this.getApplication()).getTracker(TrackerName.APP_TRACKER);
getApplication()
returns Application
object and not AnalyticsSampleApp
's. Most likely this is caused by missing reference to AnalyticsSampleApp
in your Manifest's <application>
(you need android:name
pointing at your class, see docs). In result default Application
is used by your app instead of yours class and casting exception is just result of this as you cannot cast parent class to child class.
Upvotes: 1