我在Android Studio中有一个多模块项目,并在纯Java模块(称为“应用程序”)中定义我的业务对象(我想在ui中使用的POJO对象)。最终产品将是连接到服务器的Android应用程序。
我的app结构如下(我有一个多层架构,而每个层代表一个模块):
Project
- presentation (android ui)
- application (logic / mapping DTO <--> Business Objects (POJOs))
- data (mapping JSON <--> Data Transfer Object (DTO))
- transport (network communication)
较低的3个模块是纯java /只有第一个是Android模块。
现在我的问题是: 我如何仍然使用Android的Parcelable用于提到的POJO(在纯Java模块中)。对此有依赖吗?直到现在我才发现任何东西,所以它会欣赏一些有用的提示。
我不想使用Serializable,并且不希望将模块更改为Android模块。
更新:我试图在java模块中实现Parcelable(它确实可以正常工作,但是在构建时它不能识别android.os.Parcelable。所以我回到了问题的最开始。
更新II:像尝试Parceler或类似的东西的答案不起作用android.os.Parcelable在模块中无法识别。我不是在寻找如何实现Parcelable的答案,而是如何在纯Java中使用Parcelable。感谢。
解决方案:见下文......
答案 0 :(得分:3)
我强烈建议不要使用Parcelable
。而且我已经使用了很多。如果您不打算在Android中使用IPC,请避免使用它。如果您不打算在Android流程之间传递这些对象,则无需实施Parcelable
。
如果您想在Android进程之间传递对象,则Parcelable
是必须的。你应该研究AIDL。请注意,即使您使用AIDL,这些类仍然必须实现Parcelable
。
您不需要任何特殊依赖,Android SDK就足够了。
编辑:
我知道链接的文档说&#34;如果你不需要跨不同的应用程序执行并发IPC,你应该通过实现Binder创建你的界面,或者,如果你想执行IPC,但是不需要处理多线程,使用Messenger&#34; 实现您的界面。根据我的经验,我不同意这项建议。使用绑定服务和Messenger
是一条充满隐藏陷阱的痛苦道路。 AIDL更易于实施。
答案 1 :(得分:1)
O.K。,它现在正在运作。我终于意识到在Android应用程序中运行纯Java模块是不可能的,并且你总是必须应用android库插件而不是java插件:
apply plugin: 'com.android.library'
我还必须添加一个Manifest.xml并将以下内容添加到java模块的build.gradle中:
android {
compileSdkVersion 21
buildToolsVersion "21.1.2"
defaultConfig {
minSdkVersion 16
targetSdkVersion 21
}
}
答案 2 :(得分:0)
我不太清楚你想要存档的内容,但你可以使用gson轻松地在android进程甚至ws之间进行通信。
只需使用gson将你的对象转换为json(它是基于自动化的在你的pojo上)并从json转换到另一方的对象。
答案 3 :(得分:0)
如果您正在寻找一种简单的方法将POJO包装为Parcelable
,请尝试Parceler。 Parceler是一个注释处理器,它根据POJO模型类的字段生成Parcelable
。
要让Parceler为您的pure-java库生成Parcelable
,请在Android特定源(演示文稿?)中使用@ParcelClass
注释来指示Parceler将哪些POJO用作模型。< / p>
从Parceler生成的Parcelable
输出中,您可以直接使用生成的类,也可以在将数据序列化为a之前和之后使用Parcels.wrap()
和Parcels.unwrap()
实用程序类Bundle
。