Проблемы с записью и чтением изображения из / во внутреннюю память на планшете Android (3.1) - PullRequest
2 голосов
/ 29 ноября 2011

Я думал, что это не будет слишком сложно, но в течение последних нескольких часов я бился головой о стол и был бы очень признателен за помощь.По сути, я хочу получить изображение из URL-адреса, сохранить его во внутренней памяти (не на SD-карте) и иметь возможность извлечь это изображение и показать его с помощью ImageView позже.

Вот как яполучить изображения из URL-адреса и записать их в память (URL-адреса хранятся в «фото»):

                    String urlstring = pics[l][w];
                if (urlstring != null){
                    try {
                        URL url = new URL(urlstring);
                        InputStream input = url.openStream();
                        FileOutputStream output = openFileOutput(("specimage"+l) + ("" +w+".jpg"), MODE_PRIVATE);


                        byte[] buffer = new byte[input.available()];
                        int n = input.read(buffer, 0, buffer.length);
                        while (n >= 0) {
                            output.write(buffer, 0, buffer.length);
                            n = input.read(buffer, 0, buffer.length);
                        } 
                        output.close();
                        input.close();
                    } catch (Exception e) {
                        GlobalState.popupMessage(homePage, "Error", "Files could not be stored on disk");
                    }
                }

Вот как я пытаюсь получить их (путь - это имя файла):

private Bitmap getPic(String path){
     FileInputStream in;
     Bitmap bMap = null;
        BufferedInputStream buf;
        try {
            in = openFileInput(path);
            buf = new BufferedInputStream(in);
            byte[] bMapArray= new byte[buf.available()];
            buf.read(bMapArray);
            bMap = BitmapFactory.decodeStream(buf);
            if (in != null) {
            in.close();
            }
            if (buf != null) {
            buf.close();
            }
        } catch (Exception e) {
            System.out.println("excep.");
        }
        if (bMap == null) System.out.println("null");
    return bMap;
}

Если я сделаю это, картинка не появится, но программа не вылетит.Исключение не сработало.Однако значение bMap задано как ноль.Я также получаю странное сообщение в журнале:

DEBUG / skia (19358): --- SkImageDecoder :: Factory вернул null

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

1 Ответ

1 голос
/ 29 ноября 2011

Просто попробуйте это, (замените на ваше) и дайте мне знать, что произойдет,

ImageView  img = (ImageView)findViewById(R.id.imgView1);
FileInputStream in;
     Bitmap bMap = null;
        BufferedInputStream buf;
        try {
            in = openFileInput("icon.png");
            buf = new BufferedInputStream(in);
            byte[] bMapArray= new byte[buf.available()];
            buf.read(bMapArray);
            bMap = BitmapFactory.decodeByteArray(bMapArray,0,bMapArray.length);
            img.setImageBitmap(bMap);
            if (in != null) {
            in.close();
            }
            if (buf != null) {
            buf.close();
            }
        } catch (Exception e) {
            System.out.println("excep.");
        }
...