android.app.Application无法强制转换为android.app.Activity

时间:2014-05-08 15:36:44

标签: java android android-activity classcastexception

我试图从另一个类更改LinearLayout,但是当我运行此代码时:

public class IRC extends PircBot {

ArrayList<String> channels;
ArrayList<Integer> userCount;
ArrayList<String> topics;

LinearLayout channelLayout;
Context context;

public IRC(Context ctx) {
    this.setName("xxxx");
    channels = new ArrayList<String>();
    userCount = new ArrayList<Integer>();
    topics = new ArrayList<String>();

    context = ctx;

    channelLayout = (LinearLayout) ((Activity) context).findViewById(R.id.channels);
}

我得到ClassCastException

context是使用getApplicationContext()传递Activity的主要活动;

logcat的

05-08 17:53:55.102    3736-3799/g.d.allinonechat E/AndroidRuntime﹕ FATAL EXCEPTION: Thread-5357
java.lang.ClassCastException: android.app.Application cannot be cast to android.app.Activity
        at g.d.xxx.IRC.<init>(IRC.java:34)
        at g.d.xxx.MainActivity$1.run(MainActivity.java:49)
        at java.lang.Thread.run(Thread.java:856)

7 个答案:

答案 0 :(得分:90)

您正在传递应用Context而不是<{1}}

Activity Context

无论您在何处通过,都会通过getApplicationContext(); this

由于您尝试将ActivityName.this传递给Context

,然后传递(应用程序不是您想要的活动)
Activity

您收到此异常是因为您无法将应用程序转换为(Activity) ,因为应用程序不是Activity的子类。

答案 1 :(得分:3)

如果你的项目使用dagger,然后这个错误就会出现 你可以在android manifest中添加这个

   <application
        ...
        android: name = ".BaseApplication"
        ...> ...

答案 2 :(得分:0)

以我为例,当我参加的活动从AppCompatActivity扩展到(Activity) getApplicationContext ()无效时,我只是将this放在了它的位置。

答案 3 :(得分:0)

您收到此错误,因为必需的参数是Activity,并且正在向其传递应用程序。 因此,您可以将应用程序投射到Activity上,例如:(Activity)getApplicationContext(); 或者,您可以像这样输入活动:MyActivity.this

答案 4 :(得分:0)

您也可以尝试这个。

override fun registerWith( registry: PluginRegistry) {
        GeneratedPluginRegistrant.registerWith(registry as FlutterEngine)       
    //registry.registrarFor("io.flutter.plugins.firebasemessaging.FirebaseMessagingPlugin")
    }

我认为这是比创建新类更好的解决方案。

答案 5 :(得分:0)

就我而言,我只是将 android:name=".CustomBaseClass" 放在活动标签内,而不是清单内的应用程序标签,希望对某人有所帮助。

答案 6 :(得分:-2)

对我来说,从android:name=".MainActivity"中删除<application …可以解决问题。