0

I wanna send bytearray data from activity to fragment, This is my code sending data from Activity

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

getting data in Fragment in onCreateView() method

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

but I am getting error

    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)

I have tried this

                               this.runOnUiThread(new Runnable() {
                                public void run() {
                                    Bundle bundle = new Bundle();
                               bundle.putByteArray("bytearray",byteArray);
                                    CustImageSignatureUploadFragment 
                         fragobj = new CustImageSignatureUploadFragment();
                                    fragobj.setArguments(bundle);
                                }
                            });
Mehul Kabaria
  • 6,404
  • 4
  • 25
  • 50
  • Problem is `Can't create handler inside thread Thread` instead of sending `ByteArray`. What is line number `CustImageSignatureUploadFragment.java:62` ? show more code from `CustImageSignatureUploadFragment` class – ρяσѕρєя K Jan 02 '20 at 06:54
  • This is the Fragment name where I have to send data – Pooja Patwa Jan 02 '20 at 07:08
  • bro,please notice this **https://stackoverflow.com/questions/12496700/maximum-length-of-intent-putextra-method-force-close**.you are trying to pass the image bitmap which usually more than 1MB which is maximum size availble put into bundle of intent – shadow Jan 02 '20 at 07:12

2 Answers2

0

To get byteArray do like below

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


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

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

Second Option

If you trying to pass Bitmap. To set argument as bungle.

bundle.putParcelable("bytearray", bytearray);

Get bitmap from Bundle by following code

Bitmap bitmap = getIntent().getExtras().getParcelable("bytearray");
Mehul Kabaria
  • 6,404
  • 4
  • 25
  • 50
0

Passing data inside fragment is too easy if you create newInstance of your fragment and pass your array.

   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;
    }

Then in your activity use:

CustImageSignatureUploadFragment fragobj = 
                        CustImageSignatureUploadFragment.newInstance(byteArray);
Hamza Khan
  • 1,433
  • 13
  • 19
  • Then problem isn't in Fragment side. Share the code where you are creating Fragment object and opening it. – Hamza Khan Jan 02 '20 at 07:37
  • CustImageSignatureUploadFragment fragobj = CustImageSignatureUploadFragment.byteArray(byteArray); – Pooja Patwa Jan 02 '20 at 07:48
  • or this Bundle bundle = new Bundle(); bundle.putByteArray("bytearray",byteArray); CustImageSignatureUploadFragment fragobj = new CustImageSignatureUploadFragment(); fragobj.setArguments(bundle); – Pooja Patwa Jan 02 '20 at 07:48
  • java.lang.RuntimeException: Can't create handler inside thread Thread[Thread-8,5,main] that has not called Looper.prepare()...This is the error – Pooja Patwa Jan 02 '20 at 07:48
  • In which action / method you are calling this code CustImageSignatureUploadFragment fragobj = new CustImageSignatureUploadFragment(); – Hamza Khan Jan 02 '20 at 07:51