我有我已经变成了一个Android项目库,以便在另一个类似的项目重新使用一些代码的项目(在Eclipse).因为我收到了错误,但我认为自己已经开枪了.
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
Run Code Online (Sandbox Code Playgroud)
com.lib.scrolltest是我的项目库,它实例化一个扩展Application(resAppVars)的类.在onCreate()方法中我调用:
mRav = (resAppVars) getApplicationContext ();
Run Code Online (Sandbox Code Playgroud)
这样,我可以使用mRav对象中的方法,否则在其他类中会有很多重复的代码(例如将查询传递给返回结果的ArrayList的泛型select语句).
这有什么问题?看来我在实现Application类的方式上遇到了限制.
调用 getApplicationContext() 返回当前应用程序的ApplicationonCreate()对象(即拥有正在其中运行的活动的应用程序)。
除非您正在做一些奇怪的事情,否则您无法选择使用哪个应用程序类。应用程序的文档中甚至有一条注释说不要这样做:
通常不需要子类化应用程序。在大多数情况下,静态单例可以以更加模块化的方式提供相同的功能。如果您的单例需要全局上下文(例如注册广播接收器),则可以为检索它的函数提供一个 Context,该 Context 在首次构造单例时在内部使用 Context.getApplicationContext() 。
您应该在库项目中创建一个常规共享类。或者,如果您不需要库项目提供的特殊功能,您也可以只使用常规 .jar 文件。
如果您需要共享状态,只需将其设置为单例即可。;)
| 归档时间: |
|
| 查看次数: |
6685 次 |
| 最近记录: |