Lỗi khi thêm một hình ảnh vào database SQLite?

Mình lưu một paint với dạng image. Sau đó chuyển image này sang bitmap để lưu vào SQLite. Nhận được lỗi java.lang.ArrayIndexOutOfBoundsException ở dòng code Bitmap bitmap = BitmapFactory.decodeByteArray(paint, 100, paint.length);. Làm thế nào để khắc phục ?

CanvasActivity.java

buttonSave.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        relativeLayout.setDrawingCacheEnabled(true);
        Bitmap bitmap = relativeLayout.getDrawingCache();
        ByteArrayOutputStream byteArray = new ByteArrayOutputStream();
        bitmap.compress(Bitmap.CompressFormat.PNG, 100, byteArray);
        byte[] paint = byteArray.toByteArray();

        MainActivity.database.Insert_Item(editTextName.getText().toString().trim(), paint);
        Toast.makeText(CanvasActivity.this, "Added a paint.", Toast.LENGTH_SHORT).show();
        startActivity(new Intent(CanvasActivity.this, MainActivity.class));
    }
});

PaintAdapter.java

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder viewHolder;

    // Initialize view and mapping
    if (convertView == null) {
        viewHolder = new ViewHolder();
        LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = layoutInflater.inflate(layout, null);

        viewHolder.textViewName = (TextView) convertView.findViewById(R.id.textViewName);
        viewHolder.imageView = (ImageView) convertView.findViewById(R.id.imageView);

        convertView.setTag(viewHolder);
    } else {
        viewHolder = (ViewHolder) convertView.getTag();
    }

    // Set items
    PaintItem paintItem = itemList.get(position);

    viewHolder.textViewName.setText(paintItem.getName());
    // Convert byte[] -> bitmap
    byte[] paint = paintItem.getPaint();
    Bitmap bitmap = BitmapFactory.decodeByteArray(paint, 100, paint.length);
    viewHolder.imageView.setImageBitmap(bitmap);

    return convertView;
}

private class ViewHolder {
    ImageView imageView;
    TextView textViewName;
}
Bitmap bitmap = BitmapFactory.decodeByteArray(paint, 100, paint.length);

Bạn hiểu tham số 100 là gì vậy?
Đừng tưởng dòng nén byte:

bitmap.compress(Bitmap.CompressFormat.PNG, 100, byteArray);

có số 100, thì giải nén số cũng giống vậy nhé. Ý nghĩa 2 tham số này khác nhau đấy.

3 Likes

Mình đổi 100 thành 0 thì chạy ok, nhưng chất lượng ảnh thì sẽ bị giảm đi.

Bạn vẫn chưa trả lời câu hỏi của @SITUVN.gcd mà. Dựa vào gợi ý đó thì mới ra được giải pháp chứ không phải thay mò mà không hiểu gì

2 Likes


Bạn coi android chú thích ý nghĩa của các tham số và tự tìm ra vấn đề nha <3

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?