2014-09-13 2 views
0

Итак, я последовал за это (http://java.dzone.com/articles/working-google-analytics-api) учебник, чтобы добавить Google Analytics v4 для моего приложения, но после того, как все, что есть, когда я пытаюсь запустить его я получаю ошибку, которая выглядит следующим образом:Android - Google Analytics V4 Exception

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 Код

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

} 

MY LOG:

http://pastebin.com/a2iidewj

+0

Могу ли я увидеть код для MyApplication? – hoomi

+0

Ну, вы можете найти его в учебнике, опубликованном в первом абзаце. –

+0

Вещь, скорее всего, правильная. Когда вы следуете инструкциям, вы иногда делаете нежелательные ошибки. Поэтому ваш код более важен для меня, когда я пытаюсь решить вашу проблему. Некоторые проверки, объявили ли вы свой класс MyApplication в манифесте? Является ли ваш класс MyApplication расширением android.app.Application? – hoomi

ответ

1

я до этого сталкивался с такой же проблемой. Вам нужно добавить имя приложения в файл манифеста.

<application 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:name=".MainApplication" > 
</application> 
1

Фактически, вы должны установить свой андроид: имя для класса, который вы создали, который расширяет приложение. Например, если ваш класс:

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

Ваш манифест должен быть:

<application 
    android:name=".Thisnameinmanifestconfig" 
    .../> 
</application> 

Вот так. Я надеюсь, что это помогает.

Смежные вопросы