报错信息:

E/AndroidRuntime( 1626): java.lang.NullPointerException
E/AndroidRuntime( 1626): at android.os.Parcel.readByteArray(Parcel.java:1649)
E/AndroidRuntime( 1626): at xxxx.b.a(ContactInfo.java:47)
E/AndroidRuntime( 1626): a xxxxxx.b.createFromParcel(ContactInfo.java:40)
E/AndroidRuntime( 1626): at android.os.Parcel.readParcelable(Parcel.java:2111)
E/AndroidRuntime( 1626): at android.os.Parcel.readValue(Parcel.java:2020)
E/AndroidRuntime( 1626): at android.os.Parcel.readListInternal(Parcel.java:2362)
E/AndroidRuntime( 1626): at android.os.Parcel.readList(Parcel.java:1585)
E/AndroidRuntime( 1626): at xxx.util.m.b(ParcelableUtils.java:54)
E/AndroidRuntime( 1626): atxxxxxx.xxx.onClick(MainActivity.java:646)
E/AndroidRuntime( 1626): at android.view.View.performClick(View.java:4444)
E/AndroidRuntime( 1626): at android.view.View$PerformClick.run(View.java:18445)
E/AndroidRuntime( 1626): at android.os.Handler.handleCallback(Handler.java:733)
E/AndroidRuntime( 1626): at android.os.Handler.dispatchMessage(Handler.java:95)
E/AndroidRuntime( 1626): at android.os.Looper.loop(Looper.java:136)
E/AndroidRuntime( 1626): at android.app.ActivityThread.main(ActivityThread.java:5135)
E/AndroidRuntime( 1626): at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime( 1626): at java.lang.reflect.Method.invoke(Method.java:515)
E/AndroidRuntime( 1626): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795)
E/AndroidRuntime( 1626): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:611)
E/AndroidRuntime( 1626): at dalvik.system.NativeStart.main(Native Method)
W/ActivityManager( 789): Force finishing activity xxxxx/.MainActivity

问题说明

当我在通过Parcel传递byte[]时出现了这个错误

public class ContactInfo implements Parcelable {

    private String mName;//联系人名称
private String mNumber;// 联系人号码
// private static byte[] bmBytes;//联系人头像
private Bitmap bitmap;//头像bitmap @Override
public int describeContents() {
return 0;
} @Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(mName);
dest.writeString(mNumber);
byte[] bytes=getBytesFromBitmap(bitmap);
dest.writeByteArray(bytes);
}
// 用来创建自定义的Parcelable的对象
public static final Creator<ContactInfo> CREATOR = new Creator<ContactInfo>() {
public ContactInfo createFromParcel(Parcel parcel) {
ContactInfo info = new ContactInfo();
String name = parcel.readString();
info.setmName(name);
String number = parcel.readString();
info.setmNumber(number);
byte[] bytes;
parcel.readByteArray(bytes);
info.setBitmap(getBitmapFromBytes(bytes));
return info;
} public ContactInfo[] newArray(int size) {
return new ContactInfo[size];
}
};
public static Bitmap getBitmapFromBytes(byte[] bytes) {
return BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
} private byte[] getBytesFromBitmap(Bitmap bitmap) {
ByteArrayOutputStream bytesOS = new ByteArrayOutputStream();
//this.bitmap.compress(Bitmap.CompressFormat.PNG, 0, bytesOS);
bitmap.compress(Bitmap.CompressFormat.PNG, 0, bytesOS);
return bytesOS.toByteArray();
} public void setBitmap(Bitmap bitmap) {
this.bitmap = bitmap;
} public Bitmap getBitmap() {
return bitmap;
} public String getmName() {
return mName;
} public void setmName(String mName) {
this.mName = mName;
} public String getmNumber() {
return mNumber;
} public void setmNumber(String mNumber) {
this.mNumber = mNumber;
} }

解决

需要修改为在写入时使用:

byte[] bytes=getBytesFromBitmap(bitmap);
dest.writeInt(bytes.length);
dest.writeByteArray(bytes);

在读取时使用:

byte[] bytes=new byte[parcel.readInt()];
parcel.readByteArray(bytes);

最新文章

  1. Kinect V2 基础教程之彩色图像
  2. 再说最后一次!关于不再更新SkySRS的理由!
  3. 深入底层逆向分析TDC‘s keygenme(手脱压缩壳)
  4. AC日记——逃跑的拉尔夫 codevs 1026 (搜索)
  5. Intent Flag(转)
  6. 【BZOJ】【2038】小Z的袜子
  7. c 函数传入数组。
  8. stm32内部的CAN总线
  9. vm_write
  10. Linux-进程描述(3)之进程状态僵尸进程与孤儿进程
  11. TFS build server搭建,搭建自动化构建服务器
  12. python基础(三)编码,深浅copy
  13. adb pull 报错处理:adb: error: cannot create file/directory &#39;E:\&#39;: No such file or directory
  14. iOS之UIApplicatio、AppDelegate
  15. leetcode实战
  16. [原创] 详解云计算网络底层技术——虚拟网络设备 tap/tun 原理解析
  17. 阿里启动新项目:Nacos,比 Eureka 更强!
  18. 如何正确的覆盖equals和hashCode
  19. ECC
  20. Codeforces 781C Underground Lab

热门文章

  1. 关于MySql 数据库InnoDB存储引擎介绍
  2. 松软科技带你学开发:SQL--COUNT() 函数
  3. JS基础语法---JSON格式的数据
  4. Dynamics 365 Online通过OAuth 2 Client Credential授权(Server-to-Server Authentication)后调用Web API
  5. UIPageControl页面控制的控件
  6. Good start is a half success(2019-04-07)
  7. 关于scanf的一些知识
  8. Noip2016Day1T2 天天爱跑步
  9. 【洛谷5363】[SDOI2019] 移动金币(动态规划)
  10. [Vue专题] 对比vue-cli2.x和vue-cli3.x的搭建