Получить изображение с сайта httpResponse в Android

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

К вашему сведению - содержимое изображения принимается в виде необработанного двоичного кода и его изображения в формате JPEG.

Процедура следовала:

  1. Сделайте HttpRequest.
  2. В ответ проверьте 200 -> получить контент httpentity.
  3. преобразовать поток в растровое изображение, используя фабрику BitMap.
  4. Установите растровое изображение для просмотра изображений

Делаем это в postExecute из AsyncTask

    HttpClient httpclient = new DefaultHttpClient();
    HttpGet httpget = new HttpGet(endpoint);
    // Adding Headers .. 
    // Execute the request
    HttpResponse response;
    try {
        response = httpclient.execute(httpget);
    if (response.getStatusLine().getStatusCode() == 200) {
        // Get hold of the response entity
        HttpEntity entity = response.getEntity();
        if (entity != null) {
        InputStream instream = entity.getContent();
        return instream;
        // instream.close();
            }
    }
}

Делаем это в postExecute из AsyncTask

    if (null != instream) {
        Bitmap bm = BitmapFactory.decodeStream(instream);
        if(null == bm){
    Toast toast = Toast.makeText(getApplicationContext(),
        "Bitmap is NULL", Toast.LENGTH_SHORT);
            toast.show();
    }
        ImageView view = (ImageView) findViewById(R.id.picture_frame);
    view.setImageBitmap(bm);
    }

Заранее спасибо.

2 ответа

Решение

Наконец-то нашел ответ на это. ниже приведен фрагмент - может помочь новичкам, работающим с http-ответами.

HttpClient httpclient = new DefaultHttpClient();
HttpGet httpget = new HttpGet(endpoint);
// Adding Headers .. 
// Execute the request
HttpResponse response;
try {
    response = httpclient.execute(httpget);
if (response.getStatusLine().getStatusCode() == 200) {
    // Get hold of the response entity
    HttpEntity entity = response.getEntity();
    if (entity != null) {
    InputStream instream = entity.getContent();
    String path = "/storage/emulated/0/YOURAPPFOLDER/FILENAME.EXTENSION";
    FileOutputStream output = new FileOutputStream(path);
    int bufferSize = 1024;
    byte[] buffer = new byte[bufferSize];
    int len = 0;
    while ((len = instream.read(buffer)) != -1) {
        output.write(buffer, 0, len);
    }
    output.close();
}

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

ByteArrayOutputStream baos = new ByteArrayOutputStream();
int bufferSize = 1024;
byte[] buffer = new byte[bufferSize];
int len = 0;
try {
    // instream is content got from httpentity.getContent()
    while ((len = instream.read(buffer)) != -1) {
    baos.write(buffer, 0, len);
    }
    baos.close();
} catch (IOException e) {
    e.printStackTrace();
}
byte[] b = baos.toByteArray();
Bitmap bmp = BitmapFactory.decodeByteArray(b, 0, b.length);
ImageView imageView = (ImageView)findViewById(R.id.picture_frame);
imageView.setImageBitmap(bmp);

FYI - В android fileoutput поток записи на локальный диск должен выполняться не в потоке пользовательского интерфейса (в моем случае использовалась асинхронная задача, и эта часть здесь не добавляется).

Спасибо..

Используйте эту библиотеку для работы с изображениями из Интернета. https://github.com/nostra13/Android-Universal-Image-Loader Это все для вас. Но код из onPostExecute вы должны поместить в onDoInBackground. Коды выполнения onPre и onPost будут выполняться в основном потоке, doInBackground - рабочий поток. Но просто используйте универсальный загрузчик изображений в этом случае

Другие вопросы по тегам