尽管压缩了它,但仍然出现错误 FAILED BINDER TRANSACTION

Still get error FAILED BINDER TRANSACTION although have compressed it

我想 return 图像从 AddMoreClaimsAddClaims listView。当我单击 AddMoreClaims 中的提交 button 时,我收到消息 E/JavaBinder﹕ !!! FAILED BINDER TRANSACTION !!! .

我使用这个 method 但仍然收到这个烦人的消息!

添加更多声明

Bitmap bmp,photo;
byte[] bytes;

  @Override
    protected void onActivityResult(int requestCode, int resultCode,
                                    Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        switch (requestCode) {
            case RESULT_LOAD_IMAGE:
                if (requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK & data != null && data.getData () !=null) {
                    selectedImage = data.getData();
                    try
                    {
                        photo= MediaStore.Images.Media.getBitmap(getContentResolver(), selectedImage);
                        ByteArrayOutputStream stream = new ByteArrayOutputStream();
                        photo.compress(Bitmap.CompressFormat.PNG, 100, stream);
                        bytes= stream.toByteArray();
                        bmp = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
                        imageView.setImageBitmap(bmp); // image get displayed
                    }catch(IOException e)
                    {
                        e.printStackTrace();
                    }
                }
                break;

所选图像将显示在 imageView AddMoreClaims.

单击提交 button 后,我希望它 return 到 AddClaims

submit.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {

        Intent returnIntent = new Intent();
        returnIntent.putExtra("BMP", bmp);
        setResult(Activity.RESULT_OK, returnIntent);
        finish();

    }
});

这是怎么回事?我错过了什么吗?

我认为你没有在应该压缩的地方压缩 bmp。

    submit.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {

        Intent returnIntent = new Intent();
        ByteArrayOutputStream stream = new ByteArrayOutputStream();
        bmp.compress(Bitmap.CompressFormat.PNG, 100, stream);
        byte[] bytes = stream.toByteArray();
        returnIntent.putExtra("BMP", bytes);
        setResult(Activity.RESULT_OK, returnIntent);
        finish();

    }
});

然后你应该解压缩你需要显示图像的地方

byte[] bytes = data.getByteArrayExtra("BMP");
Bitmap bmp = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
imageView.setImageBitmap(bmp);

不要使用compress large data into intent,这样会消耗更多cpu和时间, 参见 话题。 如果压缩后的数据也超过了binder的限制,也会出现这个错误:!!! FAILED BINDER TRANSACTION !!!