2017-09-15 56 views
0

我使用的是tutorial provided by Google實現Analytics(分析)在我的應用程序但有些事我可能做錯了,導致該應用與java.lang.ClassCastException的Android - 應用程序與「java.lang.ClassCastException」

崩潰崩潰這是谷歌提供:

// Obtain the shared Tracker instance. 
AnalyticsApplication application = (AnalyticsApplication) getApplication(); 
mTracker = application.getDefaultTracker(); 

這是我做了,因爲我用的是片段

// This is where I get the error 
AnalyticsApplication application = (AnalyticsApplication) getContext().getApplicationContext(); 
mTracker = application.getDefaultTracker(); 
變化

UPDATE:錯誤發生在這一行:

AnalyticsApplication application = (AnalyticsApplication) getContext().getApplicationContext(); 

這是我的logcat

FATAL EXCEPTION: main 
Process: com.incorp.labs.appname, PID: 14095 
java.lang.ClassCastException: android.app.Application cannot be cast to com.incorp.labs.appname.Helper.AnalyticsTracker 
    at com.incorp.labs.appname.OneFragment.onCreateView(OneFragment.java:126) 

更新2:這是清單文件

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="com.incorp.labs.appname"> 

<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.VIBRATE" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 
<uses-permission android:name="com.android.vending.BILLING" /> 

<application 
    android:allowBackup="true" 
    android:icon="@mipmap/newlogops" 
    android:label="@string/app_name" 
    android:supportsRtl="true" 
    android:theme="@style/MyMaterialTheme"> 
    <meta-data 
     android:name="com.google.android.gms.version" 
     android:value="@integer/google_play_services_version" /> 

    <activity 
     android:name=".Splash" 
     android:screenOrientation="portrait" /> 
    <activity 
     android:name=".MainActivity" 
     android:screenOrientation="portrait" 
     android:windowSoftInputMode="adjustPan" /> 
    <activity 
     android:name=".OneFragment" 
     android:screenOrientation="portrait" 
     android:windowSoftInputMode="adjustPan" /> 
    <activity 
     android:name=".TwoFragment" 
     android:screenOrientation="portrait" /> 
    <activity 
     android:name=".Feedback" 
     android:screenOrientation="portrait" 
     android:windowSoftInputMode="adjustPan" /> 
    <activity 
     android:name=".FourFragment" 
     android:screenOrientation="portrait" /> 
    <activity 
     android:name=".SplashTimer" 
     android:screenOrientation="portrait"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 

    <activity 
     android:name="com.google.android.gms.ads.AdActivity" 
     android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize" 
     android:theme="@android:style/Theme.Translucent" /> 

    <service android:name=".FirebaseMessagingService"> 
     <intent-filter>            
      <action android:name="com.google.firebase.MESSAGING_EVENT" /> 
        
     </intent-filter> 
    </service> 

    <activity android:name=".AboutActivity"></activity> 
</application> 

+0

1)https://stackoverflow.com/questions/31312255/error-on-my-fragment-android-app-application-cannot-被鑄到 2)https://stackoverflow.com/questions/24950341/android-google-analytics-integration-error –

+0

根據文檔,這只是在代碼試圖將一個對象轉換爲子類時拋出其中不是一個實例。 AnalyticsApplication和AnalyticsTracker – Lokesh

+0

@Lokesh我改變了類名,但這不應該是個問題吧? –

回答

2

除了實施extends Application類之外,還需要告知Android系統將哪個類用作Application類。要做到這一點,在清單中設置你的應用程序類的名稱:

<application 
     android:name="your.package.AnalyticsApplication" 
+0

這似乎是解決方案,但當我添加「android:name =」...「時,我得到」未解決的類「 '我的包看起來像這樣:'com.incorp.labs.appname' –

+0

@ThorvaldÓlavsenV。展示你究竟如何添加。 –

+0

像這樣:'android:name =「com.incorp.labs.appname.AnalyticsApplication」' –

4

只要改變這一點: -

AnalyticsTracker application = (AnalyticsTracker) getContext().getApplicationContext(); 

這樣: -

AnalyticsApplication application = (AnalyticsApplication) getContext().getApplicationContext(); 

這與我們最好的那些發生明顯的錯誤之一!

+0

我故意改變了類名,它有什麼區別? –

+1

這不是關於課程名稱。事實上,您正嘗試將'AnalyticsApplication'對象投射到'AnalyticsTracker'對象。因此,發生'ClassCastException'。它在您發佈的Google代碼中正確完成。 –

+0

不,我做了所有的更改,我仍然有同樣的錯誤,檢查更新的答案,我指定的行 –

1

我想你正在嘗試使用Context對象(getApplicationContext())作爲應用程序對象。

試試這個:編輯

AnalyticsApplication application = (AnalyticsApplication) getActivity().getApplication(); 

從你的片段,你可以調用包含片段中的活動。當你得到這個活動時,你可以像例子一樣使用getApplication()函數。

我希望它有幫助。

編輯2

如在此答案看出:https://stackoverflow.com/a/35905601/4336354從CommonsWare用戶。

您的AndroidManifest.xml文件不包含您的自定義應用程序 子類,因此Android是使用默認的一個 (android.app.Application)。

向您的元素添加一個android:name =「auc.games2.Analytics.AnalyticsApplication」 屬性。

+0

不好,那沒解決呀 –

+0

對不起,我也寫錯了。它必須是AnalyticsApplication類而不是AnalyticsTracker。 –

+0

這不是問題,我解決了它,但仍然沒有任何問題 –

相關問題