Java 通过AIDL从服务传递到UI线程的自定义类

Java 通过AIDL从服务传递到UI线程的自定义类,java,android,ipc,Java,Android,Ipc,我有一个服务,它定期向web服务器查询新消息。该服务将新消息存储在arrayList中。这些消息使用自定义类实现,存储各种元数据(字符串和长度) 活动然后连接到此服务以检索这些消息并将其显示给用户 我有一个.aidl文件,它描述了服务公开的接口 package com.example.package; interface MyInterface { List<Message> getMessages(); } package com.example.package; 接

我有一个服务,它定期向web服务器查询新消息。该服务将新消息存储在arrayList中。这些消息使用自定义类实现,存储各种元数据(字符串和长度)

活动然后连接到此服务以检索这些消息并将其显示给用户

我有一个.aidl文件,它描述了服务公开的接口

package com.example.package;

interface MyInterface {

    List<Message> getMessages();
}
package com.example.package;
接口MyInterface{
List getMessages();
}
消息
类扩展了应允许IPC传输的
包裹

问题是:Eclipse给了我一个错误,告诉我
List
的类型未知。任何导入都被标记为无效


想法?谢谢

我想留言是你们的课,而不是安卓系统的留言。如果它是一个自定义类,那么可能是希望检索该类的活动现在没有返回类消息的问题。确保此活动在类路径中包含此类

我有一个.aidl文件描述 服务所使用的接口 暴露

为什么??您只需要为远程服务使用它,并且仅当您向第三方应用程序公开API时才需要远程服务

如果您的服务是本地服务,请去掉AIDL,改用本地绑定模式


如果确实需要AIDL,那么应该能够在AIDL文件中显式导入
Parcelable
类,以便可以引用它。上面显示的AIDL接口没有此导入语句——虽然普通Java可能不需要它,但AIDL需要它,因为AIDL不自动导入类。

您需要在同一个包中为消息类创建AIDL文件,如下所示:

package mypackage;

parcelable MyClass;

然后您可以在服务aidl中使用导入。

活动和消息类在同一个包中,因此它们应该相互了解。是.aidl接口文件似乎不知道消息类。谢谢,这个文件在哪里?您是否导入了正确的消息,而不是意外导入的android.os.message在实际项目中并不是真正的消息。此邮件应导入到哪里?在活动中?是的。在服役?是的。在医院?不,它不会让我。它说这是不正确的。文档()说明“实现Parcelable协议并按值传递的自定义类。这些自定义类始终需要import语句。”因此我认为问题在于无法在AIDL文件中导入Message类。但是为什么可以呢?我已经读了一千遍了:)每当我放入一个完全限定的导入,就像示例中所示,它都会说找不到导入类。我试图重建这个项目,但没有成功。多么简单。非常感谢你。你太棒了!