无法将应用程序转换为类

时间:2014-03-11 13:10:16

标签: java android

我有以下课程:

    public class Mediator extends Application
{
    private HTTPSender sender;

    public Mediator()
    {
        sender = new HTTPSender();
    }

    public void sendMessage()
    {

    }
}

现在,在我的活动中,我会执行以下操作:

public class Contact extends ActionBarActivity {
    private Mediator mediator;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        this.mediator = (Mediator) getApplication();
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_contact);

        if (savedInstanceState == null) {
            getSupportFragmentManager().beginTransaction()
                    .add(R.id.container, new PlaceholderFragment())
                    .commit();
        }
    }
}

当我运行我的应用程序时,我得到以下内容:

  Caused by: java.lang.ClassCastException: android.app.Application cannot be cast to dk.AnApp.app.Mediator

任何人都可以告诉我为什么我无法将其转换为扩展应用程序的类吗?

3 个答案:

答案 0 :(得分:6)

在您的清单中,您应该声明Mediatorapplication类,以便将其实例化为应用程序。

例如,

<application
    android:name="dk.AnApp.app.Mediator"
    ...

Reference

这会处理异常,但不保证您的Mediator类存在的原因很充分(正如CommonsWare在评论中指出的那样)。

答案 1 :(得分:2)

this.mediator = (Mediator) getApplication();

我认为这是你的问题。 getApplication()返回Application这是Mediator的超类,所以你不能像这样抛弃继承树。

<application 
    android:label="@string/app_name" 
    android:icon="@drawable/ic_launcher" 
    android:name="ThisApplicationClass" // Here
    >

在清单文件中的应用程序元素中添加android:name属性(如上所述)可以让Android API为您返回正确的类类型。

答案 2 :(得分:0)

我已经表演过:

this.mediator = (Mediator)getApplication()

它有效! 我确实有我的Manifest,也扩展了Application在其他类中。但我仍然有这个演员问题。 幸运的是,我可以解决它! :d 谢谢!