Android для чтения и записи временных файлов - PullRequest
3 голосов
/ 20 сентября 2011

Привет! Я создал этот метод для следующего:

- принимает растровое изображение

-создание временного файла

- сжать растровое изображение и поместить его во временный файл

-открыть временный файл

-читанные байты >>> проблема здесь в моем коде

- сохранить эти байты в sqlite db

- извлечь байты из sqlite db

- снова установить эти байты как растровое изображение

Я знаю, что знаю, что это абсолютно бесполезно, но я нашел единственный способ сделать то, чего я хочу достичь:

- сжатие растрового изображения

- сохранить в базу данных 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());
    } 

}

Как я мог решить эту проблему? спасибо

1 Ответ

1 голос
/ 20 сентября 2011

Полагаю, вы получили исключение NullPointerException, и оно кажется нормальным, потому что ваш буфер равен нулю, когда вы вызываете read.

Вы должны создать экземпляр буфера с ожидаемым размером.

Попробуйтеинициализировать ваш байтовый массив следующим образом:

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

Надеюсь, это поможет

Jokahero

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...