我的问题似乎与this question和this one相似,但有点不同。
我正在制作一个库项目中的AIDL服务,并在我的应用程序中使用它。我有一个类我的应用程序中的车辆,我已经制作了parcelable,以便我可以在我的界面中使用它。 (我想从我的服务中获取一份车辆列表到我的应用程序中)
我是否需要在应用程序和库中使用Vehicle.java?
我是否需要Vehicle.aidl?
我在应用程序和库中都有Vehicle.java AND Vehicle.aidl,我开始在我的应用程序中遇到一个问题,当我从我的界面调用一个方法时,eclipse希望我将它定义为库类的Vehicle和不是应用程序(尽管它们是相同的并且都是可以分配的)。
public List<Vehicle> 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<Vehicle> getVehicles();
}
这是我在应用程序中的可分类的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<Vehicle> CREATOR = new Parcelable.Creator<Vehicle>() {
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
}
答案 0 :(得分:2)
我有理由相信你需要在两端的同一个包中使用Parcelable
类(这是你最后使用库中APPLICATION
的那个,我只会以相反的方式做到这一点)。此包也必须是在相应的aidl
文件中声明的包。
我建议使用像com.example.interop
这样的子包使这个更清洁(即,将共享对象分开在自己的包中)。然后双方都应该在该软件包中有一个Java文件+一个声明它的aidl
文件。