Intent.ACTION_PICK СБОЙ BINDER TRANSACTION для вложенного фрагмента - PullRequest
1 голос
/ 25 апреля 2020

Мне нужно, чтобы мои пользователи выбирали изображение из галереи, чтобы загрузить изображение на сервер. Я пробовал на активность, и она отлично работает. Но теперь мне нужны те же коды для дочернего фрагмента (вложенного фрагмента). Но на этот раз я всегда получал эту ошибку при отладке. Я даже не использую putExtra () в намерении.

I/Timeline: Timeline: Activity_launch_request time:23741283 intent:Intent { act=android.intent.action.PICK typ=image/* }
E/JavaBinder: !!! FAILED BINDER TRANSACTION !!!  (parcel size = 2260252)
W/ActivityStopInfo: Bundle stats:
W/ActivityStopInfo:   android:viewHierarchyState [size=2268]
W/ActivityStopInfo:     android:views [size=2220]
W/ActivityStopInfo:   android:support:fragments [size=4888]
W/ActivityStopInfo: PersistableBundle stats:
W/ActivityStopInfo:   [null]
D/AndroidRuntime: Shutting down VM
E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.xyz.student, PID: 12701
    java.lang.RuntimeException: android.os.TransactionTooLargeException: data parcel size 2260252 bytes
        at android.app.servertransaction.PendingTransactionActions$StopInfo.run(PendingTransactionActions.java:160)
        at android.os.Handler.handleCallback(Handler.java:873)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:201)
        at android.app.ActivityThread.main(ActivityThread.java:6810)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:873)
      

ChildFragment. java

AlertDialog.Builder image = new AlertDialog.Builder(getActivity());
image.setMessage(R.string.select_method);
image.setPositiveButton(R.string.method_gallery,
    new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            imageMethod.dismiss();
            if (ActivityCompat.checkSelfPermission(getActivity(), android.Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                    requestPermissions(new String[]{android.Manifest.permission.READ_EXTERNAL_STORAGE}, 7);
                }
            } else {
                Intent intent = new Intent(Intent.ACTION_PICK);
                intent.setType("image/*");
                getParentFragment().startActivityForResult(intent, GALLERY_INTENT_IMAGE);
            }
        }
    });
image.setNegativeButton(R.string.method_camera,
    new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            imageMethod.dismiss();
            captureImage();
        }
    });
imageMethod = image.create();

ParentFragment. java

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    final FragmentManager childFragmentManager = getChildFragmentManager();
    if (childFragmentManager != null) {
        final List<Fragment> nestedFragments = childFragmentManager.getFragments();
        if (nestedFragments == null || nestedFragments.size() == 0) return;
        for (Fragment childFragment : nestedFragments) {
            if (childFragment != null && !childFragment.isDetached() && !childFragment.isRemoving()) {
                childFragment.onActivityResult(requestCode, resultCode, data);
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...