Загрузите образ с AsyncTask, мне нужна помощь, если нет сетевого подключения - PullRequest
0 голосов
/ 02 июня 2011

Я новичок в программировании, так что терпите меня, это большой опыт для меня, и это было очень весело.

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

Моя проблема в том, что если нет сетевого подключения, оно вообще ничего не показывает. Я предполагаю, что есть кое-что, что я могу сделать в PostExecute, чтобы в приложении не отображалось изображение, если оно не загружает изображение из сети.

Любая помощь будет принята с благодарностью!

РЕДАКТИРОВАТЬ: я на правильном пути к отображению альтернативного изображения?

import java.io.IOException;
import java.lang.ref.WeakReference;
import java.net.MalformedURLException;
import java.net.URL;

import android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.widget.ImageView;
import android.widget.Toast;

public class ImageDownloader extends AsyncTask<String, Void, Bitmap> {

private String url;
private final WeakReference<ImageView> imageViewReference;
private Resources res;

public ImageDownloader(ImageView imageView) {
    imageViewReference = new WeakReference<ImageView>(imageView);
}


@Override
protected Bitmap doInBackground(String... params) {
    url = params[0];        
    try {
        return BitmapFactory.decodeStream(new URL(url).openConnection()
                .getInputStream());
    } catch (MalformedURLException e) {
        e.printStackTrace();
        return null;
    } catch (IOException e) {


      return BitmapFactory.decodeResource(res, R.drawable.displayThis);

        }
}


@Override
protected void onPostExecute(Bitmap result) {
    if (isCancelled()) {
        result = null;
    }
    if (imageViewReference != null) {
        ImageView imageView = imageViewReference.get();
        if (imageView != null) {
            imageView.setImageBitmap(result);
        } 
    } 
}

@Override
protected void onPreExecute() {
    if (imageViewReference != null) {
        ImageView imageView = imageViewReference.get();
        if (imageView != null) {
            imageView.setImageResource(R.drawable.uboxback);
        }
    }
}
}

Ответы [ 2 ]

0 голосов
/ 02 июня 2011

В случае сбоя интернета во время получения данных из интернета в doInBackground (), исключение будет в блоке перехвата.Здесь вы можете сделать трюк.

Взять одну глобальную переменную.Если произошел сбой интернета, присвойте значение «Failed» этой переменной в блоке catch.Затем в onPostExecute () вы можете проверить, можно ли с помощью if и else зависит от этой переменной.

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

0 голосов
/ 02 июня 2011

Если вы получаете нулевое значение в качестве возвращаемого значения из функции doInBackground, можете ли вы просто отобразить другое изображение?Также вы всегда можете проверить, доступно ли сетевое соединение, прежде чем пытаться что-либо из этого сделать и сделать что-то в этот момент?

Вы можете проверить, доступно ли сетевое соединение, выполнив что-то подобное:

ConnectivityManager cm = (ConnectivityManager) ctx.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo netInfo = cm.getActiveNetworkInfo();
        if (netInfo != null && netInfo.isConnected()) {
//this is connected
    }

Помогает ли это вообще?

Bex

...