Прерывистая проблема HttpClient GET на Android - PullRequest
1 голос
/ 17 декабря 2010

У меня есть приложение для Android, над которым я работаю, которое загружает изображение с сервера, считывает его в растровое изображение и отображает его в ImageView

Это прекрасно работает большую часть времени, но время от времени, он проходит через процесс (есть ProgressDialog, говорящий «Извлечение изображения ...»), и после его выполнения ничего не отображается.В logcat не было ничего, что, казалось бы, даже отдаленно относится к этому.

Вот код:

    Bitmap image = null;

    HttpClient client = new DefaultHttpClient();
    HttpGet get = new HttpGet(webService + "?cmd=get");

    try
    {
        HttpResponse resp = client.execute(get);

        Log.i("PhotoRouletteDebug", "Resp buffer size: " + (int)resp.getEntity().getContentLength());
        InputStream is = resp.getEntity().getContent();

        BufferedInputStream buf = new BufferedInputStream(is, (int)resp.getEntity().getContentLength());

        image = BitmapFactory.decodeStream(buf);

        // clean up
        buf.close();
        is.close();

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

Этот код вызывается из AsyncTask, но одновременно вызывается только 1 задача.

Это сводит меня с ума, у меня естьпонятия не имею, почему это продолжает делать это.

Редактировать: вот код, который устанавливает imageView

// AsyncTask for Getting a new image from the queue
protected class GetImageTask extends AsyncTask<String, String, Bitmap>
{
    protected void onPreExecute()
    {
        // lets show a progress dialog so the user knows something is going on
        progressDialog = ProgressDialog.show(PhotoRoulette.this, "", "Fetching image...", true);
    }

    protected void onPostExecute (Bitmap image)
    {
        // we got a new photo so lets display it where it needs to be displayed
        try
        {
            photoView = (ImageView)findViewById(R.id.photoView);
            photoView.setImageBitmap(image);
        }
        catch (Exception e)
        {
            Log.e("Debug", "Something absolutely retarded happened", e);
        }

        // hide the progress dialog - we're all done
        progressDialog.dismiss();
    }

    protected Bitmap doInBackground(String... urls)
    {
        // Get a new Bitmap Queue Image
        Bitmap image = imageHandler.getQueueImage();
        return image;
    }
}

1 Ответ

1 голос
/ 17 декабря 2010

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

Но если предположить, что проблема в том, что изображение искажается, вот как я бы начал отлаживать это: Обернуть buf с PushbackInputStream .Считайте байты из буфера и сохраните их в файл;затем вставьте те же байты обратно в PushbackInputStream.Затем передайте PushbackInputStream в BitmapFactory.decodeStream.Если изображение отображается успешно, удалите файл (вручную или программно). В противном случае вы можете просмотреть растровое изображение на досуге.

...