AIDL接口找不到Parcelable类的导入

时间:2013-07-30 18:54:47

标签: java import android-service aidl

我的问题似乎与this questionthis 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



}

1 个答案:

答案 0 :(得分:2)

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

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