我有以下课程:
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
任何人都可以告诉我为什么我无法将其转换为扩展应用程序的类吗?
答案 0 :(得分:6)
在您的清单中,您应该声明Mediator
是application
类,以便将其实例化为应用程序。
例如,
<application
android:name="dk.AnApp.app.Mediator"
...
这会处理异常,但不保证您的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 谢谢!