当前位置: 首页 > 面试题库 >

AIDL界面找不到Parcelable类的导入

乜裕
2023-03-14
问题内容

我正在制作库项目中的AIDL服务,并在我的应用程序中使用它。我的应用程序中有一个类别为Vehicle的类,该类可以打包,以便可以在界面中使用它。(我想从图书馆的服务中获取我的应用程序中的车辆清单)

在应用程序和库中都需要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();

}

这是应用程序中我的包裹式车辆类

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



}

问题答案:

我可以肯定地说,您需要Parcelable在两端将这些类放在同一个包中(通过APPLICATION在库端使用一个包,最终得到的结果,反之亦然)。该软件包还必须是在相应aidl文件中声明的软件包。

我建议使用一个子包com.example.interop来使它更整洁(即,将共享库放在自己的包中)。双方都应该在该程序包中包含一个Java文件+一个aidl声明它的文件。



 类似资料:
  • 我在aidl中定义了一个接口,但我无法扩展它或以任何方式找到它。ide告诉我:无法解析符号“KeyEventListener”,你知道如何解决这个问题吗? 其他信息: KeyEventListener是在KeyEventListener中定义的接口的名称。aidl 我知道android-Studio是一些类似于pre-alfa的东西,但非常喜欢它,如果有人能阻止我,我会非常高兴!

  • 我有一个小的webservice程序,在其中我需要从外部JAR导入JSONObject。在尝试部署webservice时,Glassfish找不到导入的类(从外部jar),但在IDE中看起来很好。 [2017-11-17T16:22:49.429+0100][glassfish 4.1][警告][][javax.enterprise.web][tid:_threadid=30_threadname

  • 没有图像很难描述: 编辑:(我不能发布一个图像,直到我有更多的声誉)。 jar存在于外部库中,包包含类('org.roblectric.AndroidManifest')。导入语句在“robolectric”之前是灰色的,但在“AndroidManifest”上是红色的。当我点击包(robolectric)时,它会将我带到正确的包,其中显然包含该类。 这是应用程序中唯一的机器人库,因此它不是在使用

  • 我在Eclipse中创建了一个新项目,我想在其中使用JTS库。我在创建项目期间导入了库,但在包资源管理器中找不到类。 由于我对Java和Eclipse没有经验,我将从一开始就解释我做了什么。 > 我从GitHub下载JTS库:https://github.com/locationtech/jts 我在命令行中使用创建jts-core.jar。我把它放在工作区/库中 在Eclipse中,我在work

  • 我必须使用谷歌云语音API在Xamarin.iOS应用程序中实现语音转换文本功能。 首先,我尝试使用google.cloud.speech.v1 Nuget包,但是gRPC库似乎不能与Xamarin一起工作(https://github.com/gRPC/gRPC/issues/1620,https://forums.Xamarin.com/discussion/94534/how-to-use-

  • 新手入门 - 界面导航 百度统计的界面由导航菜单、报告导航、数据筛选区域等8个模块组成。 1 . 导航菜单 导航菜单包括主页、报告、管理、应用中心四项,显示在百度统计每个屏幕的顶部,便于您快速访问。 主页:方便你快速查看账户下的站点数据信息,洞察全局。 报告:为您提供三十多种报告数据,轻松分析系统的访问情况。 管理:您可以在这里管理您的账户、站点、代码、邮件订阅、权限等各种设置信息。 应用中心:百