Android 如何在服务和活动之间传递复杂数据?
我们如何在服务和活动之间传递复杂数据(例如,雇员对象)Android 如何在服务和活动之间传递复杂数据?,android,service,android-activity,Android,Service,Android Activity,我们如何在服务和活动之间传递复杂数据(例如,雇员对象) 在这里,服务和活动位于不同的包中。可能是不同的应用 您需要通过实现Parcelable或Serializable接口来创建复杂的数据类型对象(例如Employee) 然后创建意图并通过将parcelable或serializable对象传递给意图并使用putExtra() 然后在目标类中使用getParcelableExtra()或getSerializableExtra()等获取该对象。 首先序列化要传递的对象 将序列化对象放入意图附加中
在这里,服务和活动位于不同的包中。可能是不同的应用 您需要通过实现Parcelable或Serializable接口来创建复杂的数据类型对象(例如Employee) 然后创建意图并通过将parcelable或serializable对象传递给意图并使用putExtra() 然后在目标类中使用getParcelableExtra()或getSerializableExtra()等获取该对象。
- 首先序列化要传递的对象
- 将序列化对象放入意图附加中
- 在接收端,只需获取序列化对象,反序列化它
byte[] sEmployee = extras.getByteArray("employee");
employee=(employee)反序列化对象(sEmployee)
仅供参考
请参见此示例。请检查此示例:
intent.putExtra("employee", serializeObject(employee));
byte[] sEmployee = extras.getByteArray("employee");
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();
}
}
}