【发布时间】:2013-07-30 18:54:47
【问题描述】:
我的问题似乎与this question 和this one 相似,但有点不同。
我正在创建一个库项目中的 AIDL 服务,并在我的应用程序中使用它。我的应用程序中有一个 Vehicle 类,我已将其制成 parcelable 以便我可以在我的界面中使用它。 (我想从我的服务中获取我的应用程序库中的车辆列表)
应用程序和库中是否需要 Vehicle.java?
两者都需要 Vehicle.aidl 吗?
我在应用程序和库中都有 Vehicle.java 和 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();
}
这是我的应用程序中的 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<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
}
【问题讨论】:
标签: java import android-service aidl