为了账号安全,请及时绑定邮箱和手机立即绑定

安卓扫描二维码报错:Parcel: unable to marshal value

安卓扫描二维码报错:Parcel: unable to marshal value

叮当猫咪 2019-01-17 08:09:46
使用的二维码插件 //二维码插件 implementation 'com.github.yuzhiqiang1993:zxing:2.1.8' 按钮触发 @OnClick(R.id.imageButtonScan) public void openScanCode(View view) { AndPermission.with(this).runtime() .permission(Permission.CAMERA, Permission.READ_EXTERNAL_STORAGE) .onGranted(new Action<List<String>>() { @Override public void onAction(List<String> data) { Intent intent = new Intent(); intent.setClass(getActivity(), CaptureActivity.class); ZxingConfig config = new ZxingConfig(); config.setPlayBeep(true);//扫描声音 config.setShake(true);//是否震动 默认为true config.setDecodeBarCode(true);//是否扫描条形码 默认为true config.setFullScreenScan(false);//是否全屏扫描 默认为true 设为false则只会在扫描框中扫描 intent.putExtra(Constant.INTENT_ZXING_CONFIG, config); startActivityForResult(intent, REQUEST_CODE_SCAN); } }) .onDenied(new Action<List<String>>() { @Override public void onAction(List<String> data) { Uri packageURI = Uri.parse("package:" + getActivity().getPackageName()); Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS, packageURI); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); Toast.makeText(getActivity(), R.string.tips_no_camera_permission, Toast.LENGTH_SHORT).show(); } }).start(); } 扫描成功后的回调方法 @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); // 扫描二维码/条码回传 if (requestCode == REQUEST_CODE_SCAN && resultCode == getActivity().RESULT_OK) { if (data != null) { String content = data.getStringExtra(Constant.CODED_CONTENT); if (content.length() == 12) { //如果是存货编码 checkInventoryCode(content); } else { //如果是容器号 checkContainer(content); } showDistributeMaterialList(); } } } 现象 点击按钮后,直接崩溃,并且报以下错误: E/AndroidRuntime: FATAL EXCEPTION: main Process: com.weihong.mes, PID: 6267 java.lang.RuntimeException: Parcel: unable to marshal value com.weihong.mes.model.distributeMaterial.GetNeedDistributeTable$DataBean@421dcce8 at android.os.Parcel.writeValue(Parcel.java:1273) at android.os.Parcel.writeList(Parcel.java:660) at android.os.Parcel.writeValue(Parcel.java:1233) at android.os.Parcel.writeArrayMapInternal(Parcel.java:618) at android.os.Bundle.writeToParcel(Bundle.java:1692) at android.os.Parcel.writeBundle(Parcel.java:643) at android.app.FragmentState.writeToParcel(Fragment.java:132) at android.os.Parcel.writeTypedArray(Parcel.java:1140) at android.app.FragmentManagerState.writeToParcel(FragmentManager.java:373) at android.os.Parcel.writeParcelable(Parcel.java:1292) at android.os.Parcel.writeValue(Parcel.java:1211) at android.os.Parcel.writeArrayMapInternal(Parcel.java:618) at android.os.Bundle.writeToParcel(Bundle.java:1692) at android.os.Parcel.writeBundle(Parcel.java:643) at android.app.ActivityManagerProxy.activityStopped(ActivityManagerNative.java:2594) at android.app.ActivityThread$StopInfo.run(ActivityThread.java:3318) at android.os.Handler.handleCallback(Handler.java:808) at android.os.Handler.dispatchMessage(Handler.java:103) at android.os.Looper.loop(Looper.java:193) at android.app.ActivityThread.main(ActivityThread.java:5334) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:515) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:829) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:645) at dalvik.system.NativeStart.main(Native Method) 我的猜测 是在按钮触发代码中: intent.putExtra(Constant.INTENT_ZXING_CONFIG, config); startActivityForResult(intent, REQUEST_CODE_SCAN); 在上面两行代码中出现的传值错误,但是我无法确定。我在按钮触发方法内加入了try-catch,却依旧无法捕获报错信息。 其它信息 这段代码我用在一级页面是没问题的,亲测可用。报错的这个页面是一个二级页面。一级页面向该二级页面跳转时通过Intent传递了一些信息,在二级页面中是这样接受的: orderId = getArguments().getString("orderId"); getNeedDistributeTableDataBeanList = (List<GetNeedDistributeTable.DataBean>) getArguments().getSerializable("getNeedDistributeTableDataBeanList"); 所以在二级页面中打开二维码扫描页面,二维码扫描页面就相当于是一个三级页面了。不知道这些其它信息是否有用,暂且就写上吧。
查看完整描述

1 回答

?
跃然一笑

TA贡献1826条经验 获得超6个赞

已经解决了- -;
是这样的,有两个界面,FragmentA和FragmentB。
当从FragmentA跳转到FragmentB的时候,会传递一个参数:List<GetNeedDistributeTable.DataBean>。
在FragmentB中打开扫描界面C的时候,就报错了。

解决方法:
把GetNeedDistributeTable.DataBean类implements Serializable即可。

只是我有点疑问,为什么是从FragmentB跳转到C的时候报错,而不是从FragmentA跳转到FragmentB的时候报错?
毕竟这个List是从FragmentA传递到FragmentB的啊……

查看完整回答
反对 回复 2019-02-12
  • 1 回答
  • 0 关注
  • 1007 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信