java - 如何将包含 parcelable 类 'A' 实例的 Parcelable 类 'B' 的实例写入 'B' 类的 Parcel

标签 java android recursion parcelable

我在为我的 Android 应用程序使用 parcelables 时遇到了一些问题。
我有一个名为 Transport 的自定义类,其中包含一堆 RoutePoint - 从文件加载并保存在数组中的实例。

两个类 implements Parcelable ,因为我想传递 Transport对象,其中包含 RoutePoint多个 Activity 之间的对象。

这带来了一个问题,因为每个 RoutePoint 的内部对象,我有一个 Transport用于告知哪个传输是 RoutePoint 的父对象的对象.

假装我有这些类(class):

Transport :

public class Transport implements Parcelable
{
    private RoutePoint[] points;

    public Transport()
    {
        // Here the array is initialized
    }

    // Methods needed because of the Parcelable interface
}

RoutePoint :

public class RoutePoint implements Parcelable
{
    private Transport parent;

    public RoutePoint(Transport parent)
    {
        this.parent = parent;
    }

    // Methods needed because of the Parcelable interface
}

Transport类被写入 Parcel , 我写了所有 RoutePoint也是从阵列到包裹。

RoutePoint类被写入 Parcel ,我写父Transport也到包裹。

这会导致“递归调用”,以及 StackOverflowException :

  1. Transport写一个 RoutePointParcel .
  2. RoutePoint写父TransportParcel .
  3. 家长Transport写一个 RoutePointParcel .
  4. 回到第 2 步。

我想知道我怎样才能解决这个问题,并通过 Transport在 Activity 之间上课,并传递 parent RoutePoint 中的对象以某种方式上课。

最佳答案

如果所有 RoutePoint 实例始终包含在 Transport 实例中,您可以通过不序列化 RoutePoint.parent 来修复它,而是在反序列化 Transport 时设置它。

因此,当您反序列化 Transport 实例时,反序列化 RoutePoints,然后在这些 RoutePoint 实例上调用 setTransport 方法并设置父级。

关于java - 如何将包含 parcelable 类 'A' 实例的 Parcelable 类 'B' 的实例写入 'B' 类的 Parcel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29240354/

相关文章:

java - 来自 byte[] 和 UTF-8 的字符串在 Android 上与在 Windows JVM 上给出不同的结果

Java继承与递归

java - 在对 Spring Boot REST API 的多次调用中使用相同的 JDBC 连接

java - 如何创建基于日期的ImageView(每周变化)

android - 如何使用 QtCreator 为 Android/iOS 构建基于 CMake 的项目

java - 将java文件转换为android程序

R 中的递归函数 : How do I save the output of every call to a vector?

java - 递归扫描文件并添加到数组java

c# - 一个类上有很多方法会增加该类对象的开销吗?

java - Spring 3.2 + Hibernate 4.3.4 + jUnit : EntityManagerFactory is closed