AIDL接口找不到Parcelable类的导入

我的问题似乎与这个问题类似,但这个问题有点不同。

我正在创建一个库项目中的AIDL服务,并在我的应用程序中使用它。 我有一个类在我的应用程序中的车辆,我已经做了parcelable,以便我可以在我的界面中使用它。 (我想从我的服务中获取一份车辆列表到我的应用程序中)

我是否需要在应用程序和库中使用Vehicle.java?

两者都需要Vehicle.aidl吗?

我在应用程序和库中都有Vehicle.java AND Vehicle.aidl,我开始在我的应用程序中遇到一个问题,当我从我的界面调用一个方法时,eclipse希望我将它定义为库类的Vehicle而不是应用程序(虽然它们是相同的并且都是可以分配的)。

public List getVehicles(){...code... } 

为了解决这个问题,我尝试将其作为应用程序的车辆类而不是我的IRemoteInterface.aidl中的库的车辆类(在下面列出的变体中,我收到一个无法找到导入的错误。在其他变体中比如让它成为List并且没有导入,它表示未知的返回类型)。

  package LIBRARY; import LIBRARY.RelPoint; import LIBRARY.IRemoteServiceCallback; import LIBRARY.FleetStatus; import APPLICATION.Vehicle; interface IRemoteInterface { int getPid(); void registerCallback(IRemoteServiceCallback callback); void unregisterCallback(IRemoteServiceCallback callback); List getVehicles(); } 

这是我的应用程序中的parcelable Vehicle类

 package APPLICATION; import java.util.Date; import android.os.Parcel; import android.os.Parcelable; public class Vehicle implements Parcelable { public static final String TAG = "Vehicle"; long vehicleID; long trackID; String vehicleName; public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { public Vehicle createFromParcel(Parcel src) { return new Vehicle(src); } public Vehicle[] newArray(int size) { return new Vehicle[size]; } }; public Vehicle(Parcel src) { readFromParcel(src); } public void writeToParcel(Parcel dest, int flags) { dest.writeLong(vehicleID); dest.writeLong(trackID); dest.writeString(vehicleName); } public void readFromParcel(Parcel src) { vehicleID = src.readLong(); trackID = src.readLong(); vehicleName = src.readString(); } public int describeContents() { // nothing special return 0; } public Vehicle() { } //getter and setter methods below that I removed } 

我有理由相信你需要在两端的同一个包中使用Parcelable类(这是你最后使用库中的APPLICATION的那个,我只是反过来做)。 该包也必须是相应的aidl文件中声明的包。

我建议使用像com.example.interop这样的子包来使它更干净(即,将共享对象分开在自己的包中)。 然后双方都应该在该包中有一个Java文件+一个声明它的aidl文件。

Interesting Posts