Как передавать сложные данные между Сервисом и Деятельностью? - PullRequest
4 голосов
/ 20 марта 2012

Как мы передаем сложные данные (скажем, объект сотрудника) между Сервисом и Деятельностью?

Здесь Сервис и Активность находятся в разных пакетах. Может быть другое приложение.

Ответы [ 2 ]

3 голосов
/ 20 марта 2012
  • Сначала сериализуйте объект, который вы хотите передать.
  • Поместите объект сериализации в дополнительные функции.
  • При получении, просто получите сериализованный объект, десериализовайте его.

скажем,

 Employee employee = new Employee();

затем,

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

при получении,

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

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 голос
/ 20 марта 2012

Вам необходимо создать сложный объект с типом данных (например, Сотрудник), реализовав интерфейс Parcelable или Сериализуемый .

Затем создайте Intent и используйте putExtra () , передав в него parcelable или сериализуемый объект.

Затем в целевом классе используйте getParcelableExtra () или getSerializableExtra () и т. Д., Чтобы получить этот объект.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...