Мне нужно, чтобы мои пользователи выбирали изображение из галереи, чтобы загрузить изображение на сервер. Я пробовал на активность, и она отлично работает. Но теперь мне нужны те же коды для дочернего фрагмента (вложенного фрагмента). Но на этот раз я всегда получал эту ошибку при отладке. Я даже не использую 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);
}
}
}
}