我是編程新手,所以對我很感興趣,這對我來說是一個很大的學習體驗,到目前爲止它已經很有趣了。使用AsyncTask下載圖片,如果沒有網絡連接,我需要幫助
我想要做的是加載一個圖像到我的應用程序,我更改並上傳到我的服務器定期。現在,它會加載展示位置圖片,直到正確的圖片在後臺完成下載爲止,然後顯示下載的新圖片。
我的問題是,如果沒有網絡連接,它最終什麼也沒有顯示。我假設在PostExecute中有一些東西可以在應用程序中顯示drawable,如果它無法從網絡加載圖像,我只是不知道該怎麼做!
任何幫助將不勝感激!
編輯:我在正確的軌道上顯示替代圖像?
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);
}
}
}
}
我相信你在網絡問題的情況下,越來越'IOException'等通過'null'到'onPostExecute'。你可以檢查null並顯示「錯誤」位圖然後.. – 2011-06-02 13:34:25