【问题标题】:Sending Parcelable Objects as Serializable将 Parcelable 对象作为 Serializable 发送
【发布时间】:2017-05-05 11:35:34
【问题描述】:

有问题的 Android 项目已经使用 Serializable 在内部模块之间传递信息。

我正在开发其中一个模块,它也使用外部库来计算导航路线。

我需要将这些“外部”对象之一传递给另一个模块,这不是可序列化的,因此我无法正常发送它。我之前的程序员已经将所有不可序列化的对象转换为包装类中的静态变量,我不确定这是否是一个好主意,即使模块应该一直保持活动状态。

这是 Serializable 包装类:

private static Road road;
private NavigationStep firstNavigationStep;

/**
 * To send the route information to the App. Here is everything the app needs to display the
 * data to the user.
 * @param road the route the user is to follow
 * @param firstNavigationStep the users location and the current Step.
 */
public CurrentRoad(Road road, NavigationStep firstNavigationStep){
    this.firstNavigationStep = firstNavigationStep;
    this.road     = road;
}

将道路写成瞬态会使我丢失数据,为道路编写一个完整的包装类将是太多的工作(它需要构建叠加层,所以很多几何图形都在内部并且来自外部库,所以我可能会忘记某物)。将整个项目改为 Parcelable 也不现实。

有什么解决办法吗?将我需要的内容保存为静态的最佳方式真的是?

【问题讨论】:

    标签: java android parcelable serializable


    【解决方案1】:

    尝试使用 EventBus。发送 Sticky 事件,包含对象引用。它将被传递给每个订阅的对象,直到您明确取消该事件。

    【讨论】:

    • 我们的架构中已经描述了一个消息服务,它使用Serializable。它是项目中其他人编写的 MessageManger。我是团队中的新人,项目涉及多家公司,因此添加外部库并不是那么简单
    【解决方案2】:

    也许您可以使用事件 (http://greenrobot.org/eventbus/) 将对象传递到您需要的位置。

    【讨论】:

    • 我们的架构中已经描述了一个消息服务,它使用Serializable。它是项目中其他人编写的 MessageManger。我是团队中的新人,项目涉及多家公司,因此添加外部库并不是那么简单
    • 好的,我不确定我是否理解您的问题的细微差别,但也许您可以尝试将其存储在您的(可能是扩展的)应用程序类中的单例实例中。假设您始终可以访问应用程序上下文,这将允许您存储应该与您的应用程序一样长的东西。然后可能是一个意图或其他一些信号来触发应该在接收端读取来自这个 singelton 类的值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-19
    • 2013-12-30
    • 1970-01-01
    • 2012-03-08
    • 2021-07-10
    • 2019-01-11
    • 2011-08-27
    相关资源
    最近更新 更多