2011-09-20 74 views
3

您好我创造了这个方法做了如下因素:Android的读 - 写临时文件

- 它需要一个位图

- 创建临时文件

-compress位图,并把它放在临时文件

-open临时文件

- 读取字节>>>问题是在我的代码

- 保存在sqlite的分贝这些字节从sqlite的分贝

-retrieve字节

-set这些字节作为位图图像再次

我知道,我知道完全无用的,但是这是唯一的办法,我发现做我要实现它是什么:

-compress位图

- 保存它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()); 
    } 

} 

我怎么能解决这个问题?谢谢

+0

为什么你不尝试保存/ SD卡上只检索图片的路径。它很容易使用。 –

回答

1

我想你得到一个NullPointerException,并且这似乎是正常的,因为当你调用read时你的缓冲区为空。

您必须实例化预期大小的缓冲区。

尝试初始化您的字节数组是这样的:

byte[] bb = new byte[file.length()];

希望它可以帮助

Jokahero

+0

是的,这是问题之一 – vallllll