如何在服务和活动之间传递复杂数据?

4
我们如何在一个服务和活动之间传递复杂数据(比如员工对象)?
这里的服务和活动位于不同的包中,可能是不同的应用程序。

1
请参考此链接:如何将对象传递给 Activity - ρяσѕρєя K
2个回答

3
  • 首先将要传递的对象进行序列化。
  • 将序列化后的对象放入意图附加信息中。
  • 在接收端,只需获取序列化的对象并对其进行反序列化。

例如,

 Employee employee = new Employee();

然后,
intent.putExtra("employee", serializeObject(employee));

当接收数据时,

byte[] sEmployee = extras.getByteArray("employee");

员工 = (Employee) deserializeObject(sEmployee);

顺便提一下,

public static byte[] serializeObject(Object o) throws Exception,IOException {
    ByteArrayOutputStream bos = new ByteArrayOutputStream();
    ObjectOutput out = new ObjectOutputStream(bos);
    try {
        out.writeObject(o);
        // Get the bytes of the serialized object
        byte[] buf = bos.toByteArray();

        return buf;
    } catch (IOException e) {
        Log.e(LOG_TAG, "serializeObject", e);
        throw new Exception(e);
    } finally {
        if (out != null) {
            out.close();
        }
    }
}

public static Object deserializeObject(byte[] b)
        throws StreamCorruptedException, IOException,
        ClassNotFoundException, Exception {
    ObjectInputStream in = new ObjectInputStream(
            new ByteArrayInputStream(b));
    try {
        Object object = in.readObject();
        return object;
    } catch (Exception e) {
        Log.e(LOG_TAG, "deserializeObject", e);
        throw new Exception(e);
    } finally {
        if (in != null) {
            in.close();
        }
    }
}

1

你需要通过实现ParcelableSerializable接口来创建复杂的数据类型对象(例如Employee)。

然后创建Intent并使用putExtra()parcelableserializable对象传递给它。

然后在目标类中使用getParcelableExtra()getSerializableExtra()等方法获取该对象。


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