【发布时间】:2018-07-13 01:04:43
【问题描述】:
我正在尝试将 jpg 和 png 图像文件从一个活动 (ImageUploadActivity) 发送到另一个活动 (ImageResultActivity)。图像是从图库中选择或从相机拍摄的。
//Select image from gallery
//belongs to ImageUploadActivity
Bitmap bm = MediaStore.Images.Media.getBitmap(getContentResolver(), selectedImage);
File file = new File("testPic.png");
FileOutputStream fos = openFileOutput("testPic.png" , 0);
bm.compress(Bitmap.CompressFormat.PNG, 50 , fos);
fos.flush();
fos.close();
下面是我尝试发送图像的代码行。 当我传递 PNG 格式时它运行良好,但关于 JPG 格式它返回 RuntimeError 因为 startActivity()。我将这段代码放在 Handler 中,因为我需要在开始新活动之前显示存在的屏幕一段时间。
//belongs to ImageUploadActivity's one button's clicklistener
new Handler().postDelayed(new Runnable() {
@Override public void run() {
ByteArrayOutputStream bStream = new ByteArrayOutputStream();
bm.compress(Bitmap.CompressFormat.PNG, 50, bStream);
byte[] byteArray = bStream.toByteArray();
Intent i = new Intent(ImageUploadActivity.this,ImageResultActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
i.putExtra("imageArrInput", byteArray);
startActivity(i);
}
}, 1500);
这是完整的错误跟踪
07-13 10:10:00.075 3731-3749/? E/JavaBinder: !!! FAILED BINDER TRANSACTION !!! (parcel size = 76)
07-13 10:10:02.254 15346-15346/example.com.samsung.humintec E/aaaa: [B@20377d1
i.putExtra("imageArrInput", byteArray);
Stream.flush();
bStream.close();
07-13 10:10:02.261 15346-15346/example.com.samsung.humintec E/JavaBinder: !!! FAILED BINDER TRANSACTION !!! (parcel size = 4512136)
07-13 10:10:02.267 15346-15346/example.com.samsung.humintec E/AndroidRuntime: FATAL EXCEPTION: main
Process: example.com.samsung.humintec, PID: 15346
java.lang.RuntimeException: Failure from system
at android.app.Instrumentation.execStartActivity(Instrumentation.java:1533)
at android.app.Activity.startActivityForResult(Activity.java:4399)
at android.support.v4.app.BaseFragmentActivityApi16.startActivityForResult(BaseFragmentActivityApi16.java:54)
at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:65)
at android.app.Activity.startActivityForResult(Activity.java:4358)
at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:711)
at android.app.Activity.startActivity(Activity.java:4682)
at android.app.Activity.startActivity(Activity.java:4650)
at example.com.samsung.humintec.Activity.ImageUploadActivity$2.run(ImageUploadActivity.java:119)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6682)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1520)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1410)
Caused by: android.os.TransactionTooLargeException: data parcel size 4512136 bytes
at android.os.BinderProxy.transactNative(Native Method)
at android.os.BinderProxy.transact(Binder.java:628)
at android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.java:3529)
at android.app.Instrumentation.execStartActivity(Instrumentation.java:1526)
at android.app.Activity.startActivityForResult(Activity.java:4399)
at android.support.v4.app.BaseFragmentActivityApi16.startActivityForResult(BaseFragmentActivityApi16.java:54)
at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:65)
at android.app.Activity.startActivityForResult(Activity.java:4358)
at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:711)
at android.app.Activity.startActivity(Activity.java:4682)
at android.app.Activity.startActivity(Activity.java:4650)
at example.com.samsung.humintec.Activity.ImageUploadActivity$2.run(ImageUploadActivity.java:119)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6682)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1520)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1410)
【问题讨论】:
-
如果您还发布完整的错误跟踪(堆栈跟踪)以及有关这些代码在您的活动中的位置的更多上下文,这将有所帮助。为什么 postDelayed 调用中的第二个代码?
-
@TylerV 正如你所说,我编辑了这个问题。我想稍微展示一下progressBar。
标签: android image android-intent start-activity