Android:传递没有序列化的对象

时间:2013-08-13 04:21:00

标签: android android-intent

我正在使用一个库来进行其他人编写的usb通信。我正在使用一个活动来找到正确的USB设备并制作相应的驱动程序对象,我想在另一个活动中使用该驱动程序(这有点复杂)。

不幸的是,驱动程序对象没有实现parcelable或serializable,所以我不知道如何做到这一点。所以我有两个问题

1)在活动之间传递驱动程序对象有哪些选项?

2)即使我在问题1中成功,我是否会遇到问题,因为接收活动没有获得使用usb对象的明确许可?

5 个答案:

答案 0 :(得分:1)

除了以下选项(以及其他选项,例如网络存储 - 讨论过hereJSON options)之外,无法将数据从一个Activity发送到另一个Driver 。您应该重新考虑如何执行您要执行的操作,或者考虑使用其他Serializable

如果代码是开源许可证或开放许可代码,您可以考虑通过提取源代码并根据您的需要修改代码来ParcelableAndroid进行攻击。有关反编译SharedPreferences来源的更多内容可用here

您可以使用多种方法在不同项目中的两个活动之间共享内容:

1。 SQLiteSerializationContent ProvidersParcelable。这些都需要您将 Driver 对象分解为简单类型。有关存储的更多信息,请参阅docs


2。 Intent可以在活动之间通过SharedPreferences分享。

您可以使用多种方法在同一项目中的两个活动之间共享内容:

1。您可以使用SQLiteSerializationStore。有关存储的更多信息,请参阅docs


2. 您可以将其设置为静态变量。例如,有一个保存静态变量的public class Store { /** provides static reference to the driver */ public static Object driver; } 类:

Store.driver = myDriver;

然后从任何地方进行设置,只需执行:

Object driver = Store.driver;

从任何地方来,只需:

Application

3。创建自定义Activity课程并在Android Manifest中设置此类。此应用程序可以存储驱动程序,并不一定必须是静态的。有关这方面的更多信息,请访问Extending Application to share variables globally


4. 第三个选项是为private static MyActivity self;//replace MyActivity with the name of your class. 创建单身访问者。因此,在引用了驱动程序的活动中,添加以下类变量:

public static MyActivity sharedMyActivity() {
    return self;
}

然后,添加getter:

onCreate

最后,在super.onCreate(...)中添加此行(在致电self = this; 之后):

Object driver = MyActivity.sharedMyActivity().getDriver();

现在访问你的驱动程序(我们会说它有一个getter),只需从任何地方调用它:

Activity

至于问题的第二部分 - 如果您尝试读取和写入USB中未提供{{1}}权限的硬件设备,不行。

答案 1 :(得分:1)

我想我的聚会有点迟了但是我没有提到使用服务

活动可以绑定到服务并为其提供指示,服务将启动连接/通信作业。

答案 2 :(得分:0)

1)您可以创建单个对象来保存所有交叉活动数据并在那里存储对象。它实现起来很安静。

2)权限授予整个应用程序,而不是单个活动。

就您的活动属于不同的应用程序而言,他们无法使用共享内存进行通信。

答案 3 :(得分:0)

您可以使用fastJSON轻松地将数据序列化为json字符串,然后还原回对象。 您需要做的就是为驱动程序对象创建setter和getter。

对于权限部分,您必须在用户安装包含该活动的应用时询问。没办法跳过它。

答案 4 :(得分:0)

您可以将对象转换为json格式并作为字符串传递,在接收方,您可以再次将此json字符串转换为对象。为此你可以使用gson库。 https://code.google.com/p/google-gson/downloads/list