2013-07-30 2 views
0

Моя проблема, похоже, похожа на this question и this one, но немного отличается.Интерфейс AIDL не может найти импорт для Parcelable class

Я делаю службу AIDL, которая находится в проекте библиотеки и использует ее в моем приложении. У меня есть класс Vehicle, который в моем приложении, что я сделал возможным, чтобы я мог использовать его в своем интерфейсе. (Я хотел бы получить Список транспортных средств из моей службы, которые находятся в библиотеке для моей заявки)

Нужен ли мне Vehicle.java как в приложении, так и в библиотеке?

Нужен ли мне автомобиль Vehicle.aidl?

У меня был Vehicle.java AND Vehicle.aidl как в приложении, так и в библиотеке, и я начал сталкиваться с проблемой в своем приложении, что, когда я вызывал метод из моего интерфейса, eclipse хотел, чтобы я определил его как Vehicle of the library class а не приложения (хотя они одинаковы и оба являются точными).

public List<Vehicle> getVehicles(){...code... } 

В попытке решить эту проблему, я попытался сделать это автомобиль класса приложения, а не класс автомобиля библиотеки в моем IRemoteInterface.aidl (в перечисленном вариации ниже, я получаю сообщение об ошибке, что он не может найти импорт. В других вариантах, таких как наличие списка и отсутствие импорта, он указывает неизвестный тип возврата).

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

Спасибо, что пришли сюда! Удалить класс автомобиля из приложения? Мне нужно использовать Транспортное средство там для других вещей, так это значит, что мне нужно указать транспортное средство как LIBRARY.Vehicle? Не может ли транспортное средство в библиотеке использовать транспортное средство в заявке? (Я получаю транспортное средство от службы, и я хочу поместить это транспортное средство в базу данных SQLite, которую я установил) – benzabill

+0

Когда вы говорите «библиотека», вы имеете в виду библиотеку Android или пакет библиотеки, который устанавливается? I.e., сколько apks делает эту установку? – Delyan

+0

Пакет библиотеки, который устанавливается. Это код моего босса, и я меняю его на то, что мне нужно. Я установил его как зависимость или что-то еще (я успешно использовал библиотеку ранее для других вещей) – benzabill

Смежные вопросы