我无法将Bytearray数据从活动发送到片段

时间:2020-01-02 06:49:33

标签: android arrays android-fragments android-activity bundle

我想将字节数组数据从活动发送到片段, 这是我的代码 从活动发送数据

                            Bundle bundle = new Bundle();
                            bundle.putByteArray("bytearray",byteArray);
                            CustImageSignatureUploadFragment fragobj = new 
                            CustImageSignatureUploadFragment();
                            fragobj.setArguments(bundle);

通过onCreateView()方法在Fragment中获取数据

   if (getArguments() != null) {
        byteArray = getArguments().getByteArray("bytearray");
        if (byteArray != null) {
            Bitmap bmp = BitmapFactory.decodeByteArray(byteArray, 0, 
           byteArray.length);
            binding.custImage.setImageBitmap(bmp);
        }
    }

但是我遇到错误

    java.lang.RuntimeException: Can't create handler inside thread Thread[Thread-8,5,main] that has not called Looper.prepare()
    at android.os.Handler.<init>(Handler.java:205)
    at android.os.Handler.<init>(Handler.java:118)
    at com.jmr.agency.banking.ui.base.BaseFragment$3.<init>(BaseFragment.java:816)
    at com.jmr.agency.banking.ui.base.BaseFragment.<init>(BaseFragment.java:815)
    at com.jmr.agency.banking.ui_fragment.cust_img_signature_upload.CustImageSignatureUploadFragment.<init>(CustImageSignatureUploadFragment.java:62)
    at com.jmr.agency.banking.ui.facerecognition.FRAddPersonPreviewActivity.onCameraFrame(FRAddPersonPreviewActivity.java:200)

我已经尝试过

                               this.runOnUiThread(new Runnable() {
                                public void run() {
                                    Bundle bundle = new Bundle();
                               bundle.putByteArray("bytearray",byteArray);
                                    CustImageSignatureUploadFragment 
                         fragobj = new CustImageSignatureUploadFragment();
                                    fragobj.setArguments(bundle);
                                }
                            });

2 个答案:

答案 0 :(得分:0)

要获取byteArray,请执行以下操作

Bundle b = new Bundle();
b.putByteArray("image",byteArray);


  // your fragment code 
CustImageSignatureUploadFragment 
                         fragobj = new CustImageSignatureUploadFragment();
                                    fragobj.setArguments(b);

byte[] array = getArgument().getByteArrayExtra("bytearray");

第二个选项

如果您尝试传递位图。 要将参数设置为Bungle。

bundle.putParcelable("bytearray", bytearray);

通过以下代码从Bundle中获取位图

Bitmap bitmap = getIntent().getExtras().getParcelable("bytearray");

答案 1 :(得分:0)

如果您创建片段的newInstance并传递数组,则在片段内部传递数据太容易了。

   private byte[] bytes;

   public static CustImageSignatureUploadFragment newInstance(byte[] bytes) {

        Bundle args = new Bundle();
        CustImageSignatureUploadFragment fragment = new CustImageSignatureUploadFragment();
        fragment.bytes = bytes;
        fragment.setArguments(args);
        return fragment;
    }

然后在您的活动中使用:

CustImageSignatureUploadFragment fragobj = 
                        CustImageSignatureUploadFragment.newInstance(byteArray);
相关问题