嗨,我创建了以下方法:
-它需要一个位图
-创建临时文件
-压缩位图并将其放入临时文件
-打开临时文件
-读取字节>>>问题在我的代码中
-将这些字节保存在sqlite db中
-从sqlite数据库检索字节
-再次将这些字节设置为图像位图
我知道我知道自己毫无用处,但这是我找到的唯一方法,我想达到的目标是:
-压缩位图
-保存到sqlite数据库
这是密码。程序刚刚在in.read(bb)崩溃:

private void updateBitmapData() {
    File file = null;

    FileOutputStream stream = null;

    try {
        file = File.createTempFile("image", null, getBaseContext().getFilesDir());
        stream = new FileOutputStream(file);
        System.out.println(thumbnail.getRowBytes());
        thumbnail.compress(Bitmap.CompressFormat.JPEG, 50, stream);

        stream.close();

        FileInputStream in=new FileInputStream(file);

        byte[] bb = null;
        in.read(bb); //crash
        in.close();
        System.out.println("despues compression"+bb.length);

        DBAdapter db=new DBAdapter(getApplicationContext());
        db.insertData(bb);
        Cursor c=db.getLastImage();
        if(c.moveToFirst()){
            bb=c.getBlob(0);
        }
        c.close();
        db.close();
        im.setImageBitmap(BitmapFactory.decodeByteArray(bb, 0, bb.length));

    } catch (FileNotFoundException e) {
        e.printStackTrace();
        Log.e("NuevaIncidencia", e.getLocalizedMessage());
        im.setImageBitmap(thumbnail);
    }catch (IOException e1) {
        Log.e("NuevaIncidencia", e1.getLocalizedMessage());
        e1.printStackTrace();
        im.setImageBitmap(thumbnail);
    } catch (Exception e2){
        e2.printStackTrace();
        //Log.e("NuevaIncidencia", e2.getLocalizedMessage());
    }

}

我怎样才能解决这个问题?谢谢

最佳答案

我猜您得到了一个nullpointerexception,这似乎是正常的,因为当您调用read时,缓冲区是空的。
必须用预期的大小实例化缓冲区。
尝试以这种方式初始化字节数组:
byte[] bb = new byte[file.length()];
希望有帮助
约卡英雄

08-26 05:01