【问题标题】:Send not serializable data to new Activity将不可序列化的数据发送到新的 Activity
【发布时间】:2013-04-26 13:44:01
【问题描述】:

我没有必须发送给其他Activity 的可序列化数据。 我尝试使用Intent,但这是不可能的。

Intent intent = new Intent(v.getContext(), UserDetailActivity.class);
intent.putExtra("class", user);
v.getContext().startActivity(intent);

如何将以前的Activity 的数据发送到新的Activity

【问题讨论】:

  • user 究竟是什么?自定义 User 类?
  • 什么是“用户”的类型?
  • 你能详细说明什么样的数据?
  • 用户是 ParseUser。 parse.com/docs/android_guide#users
  • 使用您的解决方案,您可以只传递字符串。所以这样你就需要像 intent.putExtra("username", user.getName()) 这样的东西来传递你想要传递的所有子参数。但这需要做很多工作,所以还是试试@cafebabe1991 解决方案吧!

标签: java android android-intent android-activity serialization


【解决方案1】:

我认为您不能这样做,因为 ParseUser 需要实现 Parcelable 或 Serializable。您可能无法修改该类,因此您可以这样做:

  1. 创建一个包装类并重构 ParseUser 对象。这个包装器需要实现 Parcelable 或 Serializable。这可能并不总是有效。

  2. 在此处扩展您创建的 Application 类,创建 ParseUser 对象的实例。

  3. 使用单例。

1 可能很棘手,2 和 3 更容易。

【讨论】:

  • 我使用 2 因为 Parse SDK 不可能使用 1。 3 和 2 一样。
【解决方案2】:

您可以通过两种方式做到这一点

1.通过意图传递数据的方式

要使用通过此方法发送的数据,请在您要将数据传递到的第二个活动中使用 getIntent() 方法,这将为您提供意图对象,并且您可以从中获取传递密钥的数据

【讨论】:

    【解决方案3】:

    您可以使用Google Gson lib 将您的对象转换和解析为 JSON 格式的字符串,并将它们作为普通的 Java 字符串传递。

    要将对象转换为 JSON 字符串:

    ParseUser user=new ParseUser();
    Gson gson = new Gson();
    String json = gson.toJson(user); 
    

    将其从 JSON 字符串解析回对象:

    ParseUser user = gson.fromJson(json, ParseUser.class); 
    

    然而,一个不相关的考虑是将 ParseUser 传递给另一个 Activity 是否是一个好主意。 ParseUser 可能因为糟糕的库设计而无法序列化,或者因为它不应该以这种方式使用。由于我不使用这个特定的库,我无法为您回答这个问题。

    【讨论】:

      【解决方案4】:

      如果您不能序列化或使对象 Parcelable,则通过 Application 对象或静态变量路由它似乎是选项。

      您还可以查看我编写的这个库(https://github.com/noxiouswinter/gnlib_android/wiki/gnlauncher),以简化将数据发送到其他活动的过程。它不需要对象被序列化或实现 Parcelable。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-12-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-02-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多