Пользовательские классы, переданные из службы в потоки пользовательского интерфейса через AIDL - PullRequest
0 голосов
/ 31 мая 2010

У меня есть служба, которая регулярно запрашивает новые сообщения на веб-сервере. Служба хранит новые сообщения в arrayList. Эти сообщения реализованы с использованием пользовательского класса, в котором хранятся все виды метаданных (строки и длинные).

Затем действие подключается к этой службе, чтобы получить эти сообщения и отобразить их пользователю.

У меня есть файл .aidl, который описывает интерфейс, предоставляемый службой.

package com.example.package;

interface MyInterface {

    List<Message> getMessages();
}

Класс Message расширяет класс Parcelable, который должен разрешать передачу IPC.

Проблема заключается в следующем: Eclipse выдает мне сообщение о том, что тип List<Message> неизвестен. Любой импорт помечается как недействительный.

Идеи? Спасибо

Ответы [ 3 ]

1 голос
/ 31 мая 2010

У меня есть файл .aidl, который описывает интерфейс, который обслуживает разоблачает.

Почему? Это необходимо только для удаленной службы, а удаленная служба нужна только в том случае, если вы предоставляете API сторонним приложениям.

Если ваша служба является локальной, избавьтесь от AIDL и используйте вместо нее шаблон локальной привязки.

Если вам действительно нужен AIDL, вы сможете явно импортировать класс Parcelable в свой файл AIDL, чтобы на него можно было сослаться. Ваш интерфейс AIDL, показанный выше, не имеет этого оператора импорта - хотя он может быть не нужен для обычной Java, он необходим для AIDL, поскольку AIDL не выполняет автоматический импорт классов.

0 голосов
/ 24 августа 2010

Вам необходимо создать файл aidl для вашего класса Message в том же пакете, например:

package mypackage;

parcelable MyClass;

Тогда вы сможете использовать импорт в сервисной помощи.

0 голосов
/ 31 мая 2010

Я думаю, что Message - это ваш класс, а не android.os.Message. Если это пользовательский класс, то, возможно, проблема в том, что действие, которое хочет получить этот класс, теперь не является классом Message. Убедитесь, что у этого действия есть этот класс в classpath.

...