2013-07-30 68 views
0

我的問題似乎與this questionthis one類似,但它有點不同。AIDL接口無法找到Parcelable類的導入

我正在製作一個庫項目中的AIDL服務,並在我的應用程序中使用它。我在我的應用程序中有一個類Vehicle,我已經制作了parcelable,以便可以在我的界面中使用它。 (我想從我的服務庫中獲得車輛清單到我的應用程序)

在應用程序和庫中是否需要Vehicle.java?

我是否需要兩個Vehicle.aidl?

我在應用程序和庫中都有Vehicle.java和Vehicle.aidl,我開始在我的應用程序中遇到問題,當我從我的界面調用一個方法時,我想將它定義爲庫類的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汽車類從應用

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 



} 

回答

2

我相當肯定,你需要有兩端的Parcelable類在同一個包(這是你最後通過使用庫中的APPLICATION來完成,我只是以相反的方式來做)。該軟件包也必須是相應的aidl文件中聲明的軟件包。

我會建議使用像com.example.interop這樣的子包來使這個更清潔(即在他們自己的包中分隔共享對象)。然後雙方應該在該包中有一個Java文件+一個aidl文件來聲明它。

+0

謝謝你來這裏!從應用程序中刪除車輛類?我需要在那裏使用Vehicle來做其他事情,那麼這意味着我需要將Vehicle作爲LIBRARY.Vehicle參考? 圖書館的車輛是否沒有辦法在應用程序中使用車輛?(我正在從服務中獲得車輛,我想將該車輛放入我設置的SQLite數據庫中) – benzabill

+0

當您說「庫」時,你是指Android庫還是安裝了一個庫包?也就是說,這種設置會產生多少次? – Delyan

+0

已安裝的庫包。這是我老闆的代碼,我正在爲我所需要的改變它。我把它設置爲依賴關係或其他任何東西(我以前成功地將庫用於其他事情) – benzabill

相關問題