安卓-应用程序崩溃,出现“故障”;java.lang.ClassCastException“;
我在应用程序中使用a来实现分析,但我可能做错了什么,导致应用程序与安卓-应用程序崩溃,出现“故障”;java.lang.ClassCastException“;,java,android,google-analytics,classcastexception,Java,Android,Google Analytics,Classcastexception,我在应用程序中使用a来实现分析,但我可能做错了什么,导致应用程序与java.lang.ClassCastException 这是谷歌提供的: // Obtain the shared Tracker instance. AnalyticsApplication application = (AnalyticsApplication) getApplication(); mTracker = application.getDefaultTracker(); 这是我所做的更改,因为我使用的是片段
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();
更新:错误发生在此行:
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)
更新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>
只需更改以下内容:-
AnalyticsTracker application = (AnalyticsTracker) getContext().getApplicationContext();
为此:-
AnalyticsApplication application = (AnalyticsApplication) getContext().getApplicationContext();
这是发生在我们最好的人身上的明显错误之一 我认为您正在尝试使用上下文对象(getApplicationContext())作为应用程序对象 尝试以下操作:编辑
AnalyticsApplication application = (AnalyticsApplication) getActivity().getApplication();
您可以从片段中调用包含该片段的活动。获取活动时,可以使用示例中的getApplication()函数
我希望有帮助
编辑2
从这个答案中可以看出:来自Commonware用户
AndroidManifest.xml文件不包含自定义应用程序
子类,所以Android使用默认的
(android.app.Application)
添加android:name=“auc.games2.Analytics.AnalyticsApplication”
属性到您的元素
除了实现
扩展应用程序
类之外,还需要告诉Android系统将哪个类用作应用程序类。为此,请在清单中设置应用程序类的名称:
<application
android:name="your.package.AnalyticsApplication"
1)2)根据文档,只有当代码试图将对象强制转换为非实例的子类时,才会引发此问题。分析应用与应用AnalyticsTracker@Lokesh我更改了类名,但这应该不是问题,对吗?我认为您没有在清单中声明自定义应用程序。显示清单。@VladMatvienko是的,正确我想我没有,请怎么做?我故意更改了类名,这有什么区别吗?这与类名无关。事实上,您正试图将一个AnalyticsApplication
对象强制转换为AnalyticsTracker
对象。因此,出现ClassCastException
。在你发布的谷歌代码中,这是正确的。不,我做了所有更改,但仍然有相同的错误,请检查更新的答案,我指定了行。我认为你现在不应该收到错误。你能清理、重建并再次运行吗?不幸的是,这并不令人担忧,我也把这行写错了。它必须是一个AnalyticsApplication类,而不是AnalyticsTracker。这不是问题所在,我已经修复了它,但仍然没有问题。在onCreate()中,您在哪个方法中编写了这行代码?在片段附加到活动之前,它不会工作,因此您应该覆盖onAttached()或onResume()方法。另外,请检查此答案,它可能会有所帮助:这似乎是解决方案,但当我添加android:name=“…”时,我得到了“未解析类”
我的软件包如下所示:com.incorp.labs.appname
@ThorvaldÓlavsenV。显示您是如何添加的。如下所示:android:name=“com.incorp.labs.appname.AnalyticsApplication”
@ThorvaldÓlavsenV.,您确定AnalyticsApplication
在包com.incorp.labs.appname>中吗?它现在已修复!该类位于我忽略的子文件夹中