首页 > 解决方案 > java.lang.RuntimeException: android.os.TransactionTooLargeException: 数据包大小 1847812 字节

问题描述

通过图像视图打开图像时出现此错误。它将给出以下错误:

E/JavaBinder:!!!Binder 交易失败!!!(parcel size = 1847812) D/AndroidRuntime: 关闭 VM E/AndroidRuntime: 致命异常: main Process: com.example.androidmobilestock, PID: 10324 java.lang.RuntimeException: android.os.TransactionTooLargeException: data parcel size 1847812 bytes

我对这个问题没有想法。谁能帮我?

这是 ImageView 活动:

public class ImageView extends AppCompatActivity {
    String itemCode;
    ACDatabase db;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_image_view);

        itemCode = getIntent().getStringExtra("itemCode");
        db = new ACDatabase(this);

        ActivityImageViewBinding binding = DataBindingUtil.setContentView(this,
                R.layout.activity_image_view);
        binding.imageView3.setContentDescription(itemCode);
        Bitmap bitmap = db.getItemImage(itemCode);
        if (bitmap != null) {
            binding.noImageTxt.setVisibility(View.INVISIBLE);
            binding.imageView3.setImageBitmap(bitmap);
        } else {
            binding.imageView3.setVisibility(View.INVISIBLE);
        }
        binding.setHandler(new MyClickHandler(ImageView.this));
//        //Exit on touch
//        binding.imageView3.setOnClickListener(new View.OnClickListener() {
//            @Override
//            public void onClick(View v) {
//                onBackPressed();
//            }
//        });

    }

    public class MyClickHandler {
        Context context;

        public MyClickHandler(Context context) {
            this.context = context;
        }

        public void closeOnClick(View view) {
            onBackPressed();
        }
    }

这是 ImageView XML:

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools">

    <data>
        <variable
            name="handler"
            type="com.example.androidmobilestock.ImageView.MyClickHandler" />
    </data>

    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".ImageView">

        <ImageView
            android:id="@+id/imageView3"
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:contentDescription="No Image"
            android:scaleType="fitCenter"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            app:srcCompat="@drawable/ic_menu_gallery"
            android:onClick="@{handler::closeOnClick}"/>

        <TextView
            android:id="@+id/no_image_txt"
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:gravity="center"
            android:text="No Image Available"
            android:textColor="@android:color/white"
            android:textSize="24sp"
            app:fontFamily="@font/amiko"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="@+id/imageView3"
            android:onClick="@{handler::closeOnClick}"/>
    </androidx.constraintlayout.widget.ConstraintLayout>

</layout>

SQLiteOpenHelper 类:

public Bitmap getItemImage(String itemCode) {
        Cursor data;
        SQLiteDatabase database = this.getReadableDatabase();
        String[] itemCols = new String[]{"Image"};
        data = null;

        try {
            data = database.query(TABLE_NAME_ITEM, itemCols, "ItemCode = ?",
                    new String[]{itemCode}, "", "", "");
        } catch (Exception e) {
            Log.i("custDebug", e.getMessage());
        }
        if (data.getCount() > 0) {
            if (data.moveToNext()) {
//                if (data.getString(0) != null) {
//                    byte[] decodedString = data.getBlob(0);
//                    Bitmap decodedByte = BitmapFactory.decodeByteArray(decodedString, 0,
//                            decodedString.length);
//                    return decodedByte;
//                }
                if (data.getString(0) != null) {
                    byte[] decodedString = null;
                    decodedString = Base64.decode(data.getString(0), Base64.DEFAULT);
                    Bitmap decodedByte = BitmapFactory.decodeByteArray(decodedString, 0,
                            decodedString.length);
                    return decodedByte;
                }
            }
        }
        return null;
    }

标签: javasqliteandroid-studio

解决方案


减少发送到其他活动的数据,因为 android 的最大限制为 1 Mb。


推荐阅读