类扩展Android项目库中的应用程序?

时间:2011-12-27 22:18:58

标签: android

我有一个项目(在Eclipse中),我已经变成了一个Android项目库,以便重用另一个类似项目中的一些代码。我觉得自己已经开枪了,因为我收到了错误:

Unable to start activity ComponentInfo{com.test.scroller1/com.lib.scrolltest.ScrollTestActivity}: java.lang.ClassCastException: android.app.Application cannot be cast to com.lib.scrolltest.resAppVars

com.lib.scrolltest是我的项目库,它实例化一个扩展应用程序的类(resAppVars)。在onCreate()方法中,我调用:

mRav = (resAppVars) getApplicationContext ();

这样,我可以使用mRav对象中的方法,否则在其他类中会有很多重复的代码(例如将查询传递给返回结果的ArrayList的泛型select语句。)

这里有什么问题?看来我在实现Application类的方式上遇到了限制。

2 个答案:

答案 0 :(得分:4)

调用getApplicationContext()返回当前应用程序的Application对象(即拥有onCreate()正在其中运行的活动的应用程序。)

除非你做了一些奇怪的事情,否则你不会选择使用哪个Application类。 Application的文档中甚至还有一条说明不要这样做的说明:

  

通常不需要子类Application。在大多数情况下,   静态单例可以在更模块化的情况下提供相同的功能   办法。如果您的单身人士需要全局上下文(例如注册   广播接收器),可以给出一个检索它的功能   内部使用Context.getApplicationContext()的Context   首先构建单身人士。

您应该只在库项目中创建一个常规共享类。或者,如果您不需要库项目提供的特殊功能,您也可以使用常规.jar文件。

如果您需要共享状态,只需将其设为单身。 ;)

答案 1 :(得分:3)

虽然这是一篇非常古老的帖子。我遇到了同样的问题并解决了它。所以我想我会为每个人发布解决方案。

事实证明,我忘了在清单文件中声明子类应用程序名称。 android:name应该指向扩展的app类,即使它是在引用的库中定义的。

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme"
    android:name="com.example.lib.MyApp">

在我添加之后,我可以在项目的任何位置使用带有(<cast>) getApplication()的扩展应用。