2010-05-30 2 views
0

웹 서버에 새 메시지를 정기적으로 쿼리하는 서비스가 있습니다. 이 서비스는 새 메시지를 arrayList에 저장합니다. 이러한 메시지는 모든 종류의 메타 데이터 (문자열 및 long)를 저장하는 사용자 정의 클래스를 사용하여 구현됩니다.AIDL을 통해 서비스에서 UI 스레드로 전달되는 사용자 정의 클래스

활동은이 서비스에 연결하여 해당 메시지를 검색하여 사용자에게 표시합니다.

서비스가 제공하는 인터페이스를 설명하는 .aidl 파일이 있습니다.

package com.example.package; 

interface MyInterface { 

    List<Message> getMessages(); 
} 

Message 클래스는 IPC 전송을 허용한다 Parcelable 클래스를 확장한다.

문제점은 다음과 같습니다. Eclipse에서 List<Message> 유형을 알 수 없다는 오류 메시지를 표시합니다. 모든 가져 오기는 유효하지 않은 것으로 표시됩니다.

아이디어가 있으십니까? 감사합니다

답변

1

서비스가 제공하는 인터페이스 인 을 설명하는 .aidl 파일이 있습니다.

왜? 원격 서비스에만 필요하며 타사 응용 프로그램에 API를 제공하는 경우 원격 서비스 만 필요합니다.

서비스가 지역 서비스 인 경우 AIDL을 제거하고 대신 로컬 바인딩 패턴을 사용하십시오.

정말로 AIDL이 필요한 경우 AIDL 파일에 Parcelable 클래스를 명시 적으로 가져올 수 있어야 참조 할 수 있습니다. 위에 표시된 AIDL 인터페이스에는이 import 문이 없습니다. 일반 Java에는 필요하지 않지만 AIDL에는 클래스가 자동 반입되지 않으므로 AIDL에 필요합니다.

+0

얼마나 간단합니다. 고맙습니다. 너 락! –

0

나는 메시지가 당신의 클래스이고 notroid.os.Message라고 생각합니다. 그것이 커스텀 클래스라면, 아마도이 클래스를 검색하고자하는 액티비티가 이제는 Message 클래스가 아니라는 것이 문제 일 것입니다. 이 액티비티가 클래스 패스에이 클래스를 가지고 있는지 확인하십시오.

+0

활동 및 Message 클래스는 동일한 패키지에 있으므로 서로에 대해 알아야합니다. Message 클래스에 대해 알지 못하는 .aidl 인터페이스 파일입니다. 감사합니다 –

+0

와이 파일은 어디에 있습니까? 실수로 android.os.message가 아닌 정확한 메시지를 가져 왔습니까 –

+0

실제 프로젝트에서는 Message라고하지 않습니다. 이 메시지는 어디에서 가져와야합니까? 활동 중에? 네. 서비스에서? 네. .aild? 아니, 그렇게하지 않을거야. 그것은 그것이 틀렸다는 것을 말한다. –

0

는이 같은, 동일한 패키지에 메시지 클래스에 대한 AIDL 파일을 작성해야합니다

package mypackage; 

parcelable MyClass; 

는 그런 다음 서비스 AIDL에서 가져 오기를 사용할 수 있습니다.

관련 문제