2017-09-15 6 views
0

私は私のアプリでをAnalyticsを実装するtutorial provided by Googleを使用していますが、アプリはjava.lang.ClassCastExceptionアンドロイド - 「java.lang.ClassCastExceptionが」

でクラッシュし、私はおそらく間違っていた何かでクラッシュするアプリケーションは、これはどのようなGoogleのです提供:

// 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(); 

これは

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) 

私LogCatでUPDATE 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- be-cast-to 2)https://stackoverflow.com/questions/24950341/android-google-analytics-integration-error –

+0

ドキュメントによると、これは、コードがオブジェクトをサブクラスにキャストしようとしたときにだけスローされますそのうちの1つはインスタンスではありません。 AnalyticsApplicationとAnalyticsTracker – Lokesh

+0

@Lokeshクラス名を変更しましたが、それは問題ではないでしょうか? –

答えて

2

extends Applicationクラスの実装に加えて、Androidクラスにアプリケーションクラスとして使用するクラスを通知する必要があります。そのためには、マニフェストでアプリケーションクラスの名前を設定します。

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

これは解決策のようですが、私は 'android:name =" ... "を追加すると" Unresolved class " 'my packaageは次のようになります:' com.incorp.labs.appname' –

+0

@ThorvaldÓlavsenV。どのように正確に追加したかを示します。 –

+0

のように: 'android:name =" com.incorp.labs.appname.AnalyticsApplication "' –

4

ちょうどこの変更: - :それは私たちの最高に起こるそれらの明白な誤りの一つだ

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

- これまで

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

を!

+0

私は目的に応じてクラス名を変更しましたが、何か違いはありますか? –

+1

クラス名ではありません。 'AnalyticsApplication'オブジェクトを' AnalyticsTracker'オブジェクトにキャストしようとしています。したがって、 'ClassCastException'が発生します。あなたが投稿したGoogleコードで正しく実行されています。 –

+0

いいえ私はすべての変更を加えましたが、私はまだ同じエラーがあります。私が行を指定したところで更新された答えを確認してください。 –

1

私はアプリケーションオブジェクトとしてコンテキストオブジェクト(getApplicationContext())を使用しようとしていると思います。

これを試してみてください:EDIT

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

あなたの断片から、あなたはその断片を含むアクティビティを呼び出すことができます。アクティビティを取得すると、この例のようにgetApplication()関数を使用できます。

私はそれが役に立ちそうです。この回答に見られるように

EDIT 2

https://stackoverflow.com/a/35905601/4336354 CommonsWareユーザーから。 Androidはデフォルトの1 (android.app.Application)を使用しているので、

あなたのAndroidManifest.xmlファイルには、カスタムアプリケーション サブクラスが含まれていません。

要素にandroid:name = "auc.games2.Analytics.AnalyticsApplication" 属性を追加します。

+0

いいえ、それはそれを解決しませんでした –

+0

申し訳ありませんが、私はまた、行を間違って書きました。 AnalyticsTrackerではなく、AnalyticsApplicationクラスである必要があります。 –

+0

それは問題ではない、私はそれを固定し、まだ何も –

関連する問題