前言
记录一下AIDL中常见的问题,方便自己回忆和学习。
正文
package com.biumall.binderlibmedia.bean; import android.os.Parcel; import android.os.Parcelable; public class BookBean implements Parcelable{ private String name; private String author; private double price; private int page; //略 protected BookBean(Parcel in) { //PS: 读值顺序和writeToParcel()方法中一致的 name = in.readString(); author = in.readString(); price = in.readDouble(); page = in.readInt(); } @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeString(name); dest.writeString(author); dest.writeDouble(price); dest.writeInt(page); } public static final Creator<BookBean> CREATOR = new Creator<BookBean>() { @Override public BookBean createFromParcel(Parcel in) { return new BookBean(in); } @Override public BookBean[] newArray(int size) { return new BookBean[size]; } }; }
无法解析BookBean
Failed to resolve 'BookBean'
原因
BookBean不是AIDL支持豁免的类型,这个是我们定义的封装类,需要手动导入对应的包名。
AIDL支持int,short,boolean等基本类型,以及String,CharSequence和List自动导入包名,但其他的都需要手动导入。
比如上面的BookBean活ArrayList等需要手动导入。
解决方法
导入BookBean的包名
import com.biumall.binderlibmedia.bean.BookBean;
无法找到BookBean类
couldn't find import for class com.biumall.binderlibmedia.bean
原因
aidl这个语言的规范就是aidl文件,需要把BookBean转为aidl文件给其他aidl调用。
解决方法
在aidl目录下,创建BookBean一样的包名目录
com.biumall.binderlibmedia.bean
在创建的目录下,创建aidl文件,改名字为BookBean.aidl,写入如下内容
package com.biumall.binderlibmedia.bean; parcelable BookBean;
PS : parcelable是小写
can be an out type
parameter bean (argument 1): 'com.biumall.binderlibmedia.bean.BookBean' can be an out type, so you must declare it as in, out, or inout.
原因
有些类型缺少in\out\inout标签就会报错。
in 表示数据只能由客户端流向服务端; out 表示数据只能由服务端流向客户端;inout 表示数据可在服务端和客户端双向流通。
解决方法
我这异常提示是如下两个方法
void addBook(BookBean bean); boolean removeBook(BookBean bean);
添加一个in标签,如下
void addBook(in BookBean bean); boolean removeBook(in BookBean bean);
参考文章
-
《》
-
《》
-
《》
历史上的今天
暂无评论...
随机推荐
Android 6.0 Settings源码简单分析之蓝牙(2)
上一篇《Android 6.0 Settings源码简单分析之蓝牙(1)》我们只是简单的介绍了蓝牙的界面和流程的启动,讲得比较粗糙,这次我们继续深入讨论蓝牙,设计Framework的代码源码:Android 6.0应用:Settings 和 Framework(权且看做一个应用吧^_^...
jaudiotagger解析ID3第三版
前言之前介绍过jaudiotagger的第二版《jaudiotagger解析ID3第二版》,虽然代码上有优化,但还是效果不是不太理想,当然比第一版好多了哈。因此阅读jaudiotagger源码进行对之前的代码优化。正文导入jaudiotagger.jar导入lib库/libs/jaud...
Android消息机制之二简介(2)
我们通过上一篇《Android消息机制Handler,Looper,Message,MessageQueue关系之一》知道,Android的消息机制必须将Handler,Looper,Message,MessageQueue一起“组织”起来,而且是缺一不可。比如在子线程中使用Handler必须先L...
Linux一键安装web环境使用
看本教程需要需要在阿里云的云市场中购买阿里云linux一键安装web环境(含视频教程)安装包,这个我很早就在使用。偶然发现这教程还是可以的额,因此在这摘抄一下自己平常使用的,算是总结吧。目前使用apache比较多,因此以这个为准。0、一键安装后的路径网站目录:/alidata/ww...
Zygote的启动之二ZygoteInit
前言Android系统中,所有的应用程序以及SystemServer都是由Zygote进程孕育(fork)出来的。接上文,上文介绍从Native世界进入了Java世界。而且java世界的大门就是ZygtoeInit.java。这次我们看ZygtoeInit中处理了哪些功能。Android P...
李娟:通往滴水泉的路
最早的时候,通往滴水泉的路只有“乌斯曼小道”。乌斯曼是一百年前那个鼎鼎有名的阿尔泰土匪头子,被称为“哈萨克王”。而更早的一些时候,在这茫茫戈壁,所有的路都只沿着其边缘远远绕过。那些路断断续续地,虚弱地进行在群山褶皱之中,遥遥连接着阿尔泰的绿洲和南方的草原雪山。没有人能从这片荒原的腹心通过。没有水,...