java - 为什么我会收到 TransactionTooLargeException?
问题描述
我正在开发一个 Android 项目,但是当我需要从图库中拍照时,我被卡住了。确实,当我拍摄第一张照片时,一切都很顺利。但是,如果我拍摄第二张照片,则会引发异常“TransactionTooLargeException”并且我的应用程序崩溃了。
用于启动活动的代码:
public void addImage(View view) {
if(isPermissionEnable) {
try {
Intent intent = new Intent(Intent.ACTION_PICK);
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent, ""), ADD_IMAGE);
} catch (Exception ex) {
GraphicUtils.displayPopup(this, getString(R.string.warning),
getString(R.string.image_too_large));
}
}else
{
askPermissions();
}
}
得到结果的代码:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
switch (requestCode) {
case ADD_IMAGE:
if(getContentResolver().getType(data.getData()).contains("jpeg") || getContentResolver().getType(data.getData()).contains("jpg") || getContentResolver().getType(data.getData()).contains("png") || getContentResolver().getType(data.getData()).contains("bmp")) {
Uri uri = data.getData();
try {
Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), uri);
int minimumSize = (bitmap.getWidth() < bitmap.getHeight()) ? bitmap.getWidth() : bitmap.getHeight();
finalBitmap = ThumbnailUtils.extractThumbnail(bitmap, minimumSize, minimumSize);
imageView.setImageBitmap(finalBitmap);
button_right.setVisibility(View.VISIBLE);
button_left.setVisibility(View.VISIBLE);
} catch (Exception e) {
e.printStackTrace();
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage(uri.toString());
builder.setTitle("Erreur");
AlertDialog dialog = builder.create();
dialog.show();
}
}
else{
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage(getContentResolver().getType(data.getData()));
builder.setTitle("Erreur");
AlertDialog dialog = builder.create();
dialog.show();
}
break;
default :
break;
}
}
}
你有什么想法可以解决我的问题吗?
解决方案
从文件:
避免 TransactionTooLargeException 的关键是保持所有事务相对较小。尽量减少为参数和远程过程调用的返回值创建 Parcel 所需的内存量。避免传输大量字符串或大型位图。如果可能的话,试着把大的请求分解成更小的部分。
我猜你正在执行几笔交易,或者很可能是一笔相当大的交易。
尝试在您的应用程序中分析和评估您可以限制和遏制您请求的数据量的地方。
另外,请查看此SO question以获取更多信息。
推荐阅读
- python - Numpy随机选择,仅沿一个轴替换
- java - 如何列出所有产品 wp-restapi wrapper java v1.2?
- python-3.x - 散点图中的 x 轴不跟随小部件控件的变化
- sql - 用 sql/rails 比较两个日期
- excel - VBA:带有两个条件的 If 语句的错误 13
- windows - 是否有适用于 Windows 的预建 clang 库?
- oracle - 更新每组的第一行 - Oracle
- javascript - 如何根据 CSV 中的坐标在 Leaflet 中绘制圆形标记?
- java - 无法使用 Apache Spark 读取本地 .parquet 文件
- node.js - 如何使用 web3 从 nodejs 应用程序调用智能合约