如何在外部对象上实现Parcelable?

4
我的应用程序使用一个外部库(以JAR文件的形式)查询服务。当我查询此服务时,我会得到一个对象列表(泛指对象,而不是Object),它们在当前形式下不实现Parcelable接口。我需要在活动之间发送其中一个对象,因此我假设我需要以某种方式使它们实现Parcelable接口。然而,如果它们不是我的对象,我不确定如何做到这一点,而且我在网上找到的所有教程似乎只处理作者为自己的项目创建的对象。
非常感谢您的帮助。如果需要澄清什么,请告诉我。
2个回答

3
假设您可以自己实例化对象的新副本,您始终可以使用组合并实现自己的Parcelable数据传输对象来进行传输:
  1. 创建一个新的Parcelable类,让我们称之为PObject。
  2. 为PObject添加一个构造函数,该构造函数接受不实现Parcelable的对象的副本。
  3. 在PObject上创建一个方法,该方法返回不实现Parcelable的对象的完全实例化副本。

    现在,您应该能够使用PObject实现来传输对象。

Parcelable接口的文档显示了传输整数的基本示例。
当然,这假设您需要Parcelable:如果Activities在同一进程中,您可能只需使用全局静态变量将它们传递。虽然不是最漂亮的,但通常足够好。

我怎么知道它们是否在同一个进程中?这是一个相对简单的应用程序;我有一个主要的ListActivity,显示标题列表,然后当点击该标题时,在另一个活动中显示更多信息。我试图在两个活动之间传递的对象仅包含有关标题和描述的信息,以及其他参数。 - jnevelson
如果它们是同一个APK的一部分,那么它们很可能在同一个进程中。 - Femi
最好(代码看起来更好)按照您最初的建议实现Parcelable并使用组合而不是将其存储为全局静态对象。 - Vince

2
另一种选择是使用您的应用程序来存储这些对象。简单地继承Application,将其作为单例声明,并在Manifest.xml中声明它。
public class MyApplication extends Application {
    private static final MyApplication instance;

    public static MyApplication getInstace() {
        return instance;
    }

    public void onCreate() {
        instance = this;
    }

    private MyObject myObj;

    public MyObject getMyObject() {
        return this.myObj;
    }

    public void setMyObject(MyObject myObj) {
        this.myObj = myObj;
    }
}

然后稍后您可以将其存储:
MyApplication.getInstance().setMyObject(anObject);

并进行恢复操作:

MyObject anObject = MyApplication.getInstance().getMyObject();

请记住以下内容:

  1. 在Manifest.xml中将MyApplication类声明为应用程序。
  2. 如果您的进程被杀死或退出,则您的数据将不再可用。

这个方法可行,谢谢。我本来想通过将对象传递给活动来实现它(也许最终我会改变它以使其按照这种方式工作),但目前来说,这是最简单和最有效的解决方案。 - jnevelson
我不明白为什么你要将MyApp设置为单例,因为操作系统似乎会创建MyApp的一个单一实例,并且getApplicationContext()方法似乎总是返回由操作系统创建的同一个MyApp单一实例。这样,“全局访问点”将返回该类的单一实例。 - JAL
@JAL 是的,这只是为了方便而已,否则你需要像getApplicationContext()一样获取它,然后将其转换为你的Application类。请注意,实例是在重写的onCreate方法中分配的,因此它是操作系统创建的相同实例。 - aromero
如何在Manifest.xml中将MyApplication类声明为应用程序? - hitzi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接