Android Скачать Изображение через intentservice ОК, но не может установить его в ImageVIew


Я борюсь с моим кодом приложения для Android...

Я пытаюсь загрузить изображение (через intentService), а затем отобразить его, добавив ImageView к LinearLayout.

Пока все хорошо, у меня есть absolutepath, отправленный мне intentservice, управляющим загрузкой. Я получаю тост с названием пути.

Но я не могу отобразить изображение, добавив imageview... И я действительно не знаю почему...

Сначала я подумал, что мой обработчик не может добраться до макета но мне удалось отобразить случайное изображение моих ресурсов с помощью setImageResource. Поэтому я предполагаю, что проблема исходит либо от setimagebitmap, либо от bitmapfactory decode...

В моем Intentservice у меня есть (вывод-это имя моего файла):

Messenger messenger = (Messenger) extras.get("MESSENGER");
Message msg = Message.obtain();
msg.arg1 = result;
msg.obj = output.getAbsolutePath();
try {
     messenger.send(msg);
} etc...

Возвращаясь к моей основной деятельности, у меня есть:

Private Handler handler = new Handler() {
    public void handleMessage(Message message) {

        // I Get the message
        Object path = message.obj;

        //Check if download went ok
        if (message.arg1 == RESULT_OK && path != null) {
        Toast.makeText(Update3sur3.this,
            "Downloaded" + path.toString(), Toast.LENGTH_LONG)
            .show();

            //Try to display the pic
            LinearLayout res2=(LinearLayout)findViewById(R.id.reslayout2);
        ImageView imgView2 = new ImageView(Update3sur3.this);
        Bitmap bitmap= BitmapFactory.decodeFile(path.toString());
        imgView2.setImageBitmap(bitmap);
        res2.addView(imgView2);
    } else {
        Toast.makeText(Update3sur3.this, "Download failed.",
            Toast.LENGTH_LONG).show();
      }
    };
  };

Большое вам спасибо!

Лоран

1 2

1 ответ:

Сначала я бы попытался убедиться, что я могу правильно получить доступ к файлу, т. е. выполните следующие действия:

  1. Используйте метод decodeByteArray (byte[] data, int offset, int length) вместо BitmapFactory.decodeFile(путь.toString())

  2. Чтобы использовать этот новый метод, вам придется прочитать массив байтов файла самостоятельно, это добавит дополнительные шаги, но вы будете уверены, что читаете файл правильно.

  3. Используйте FileInputStream для чтения байты

File imageFile = новый файл (путь); byte imageData[] = новый байт [(int)imageFile.длина ()];

BufferedInputStream in = new BufferedInputStream(new FileInputStream (imageFile);

Ин.read(imageData, 0, (int)imageFile.длина ());

Журнал.d ("", "размер файла изображения:" + imageFile.length ()); / / проверьте здесь, правильно ли вы получаете размер файла?

/ / теперь imageData-это массив байтов, который вы будете использовать для создания образа так: decodeByteArray (imageData, 0, (int) файл изображений.длина ());

Если изображение по-прежнему не появляется, то поместите операторы протоколирования и выведите размер изображения и посмотрите, правильно ли оно.