android doInBackground
大家好 如何使此代码等待它完成图像下载 我可以用什么来代替android doInBackground,android,background,download,Android,Background,Download,大家好 如何使此代码等待它完成图像下载 我可以用什么来代替doInBackground(URL…path)让它等待下载,然后继续剩下的代码 private class DownloadImageTask extends AsyncTask<URL, Integer, Bitmap> { // This class definition states that DownloadImageTask will take String // parameters, publi
doInBackground(URL…path)
让它等待下载,然后继续剩下的代码
private class DownloadImageTask extends AsyncTask<URL, Integer, Bitmap> {
// This class definition states that DownloadImageTask will take String
// parameters, publish Integer progress updates, and return a Bitmap
protected Bitmap doInBackground(URL... paths) {
URL url;
try {
url = paths[0];
HttpURLConnection connection = (HttpURLConnection) url
.openConnection();
int length = connection.getContentLength();
InputStream is = (InputStream) url.getContent();
byte[] imageData = new byte[length];
int buffersize = (int) Math.ceil(length / (double) 100);
int downloaded = 0;
int read;
while (downloaded < length) {
if (length < buffersize) {
read = is.read(imageData, downloaded, length);
} else if ((length - downloaded) <= buffersize) {
read = is.read(imageData, downloaded, length
- downloaded);
} else {
read = is.read(imageData, downloaded, buffersize);
}
downloaded += read;
publishProgress((downloaded * 100) / length);
}
Bitmap bitmap = BitmapFactory.decodeByteArray(imageData, 0,
length);
if (bitmap != null) {
Log.i(TAG, "Bitmap created");
} else {
Log.i(TAG, "Bitmap not created");
}
is.close();
return bitmap;
} catch (MalformedURLException e) {
Log.e(TAG, "Malformed exception: " + e.toString());
} catch (IOException e) {
Log.e(TAG, "IOException: " + e.toString());
} catch (Exception e) {
Log.e(TAG, "Exception: " + e.toString());
}
return null;
}
protected void onPostExecute(Bitmap result) {
String name = ImageLink.substring(ImageLink
.lastIndexOf("/") + 1);
if (result != null) {
hasExternalStoragePublicPicture(name);
saveToSDCard(result, name);
isImage = true;
} else {
isImage = false;
}
}
}
私有类下载ImageTask扩展异步任务{
//该类定义声明DownloadImageTask将采用字符串
//参数,发布整数进度更新,并返回位图
受保护位图doInBackground(URL…路径){
网址;
试一试{
url=路径[0];
HttpURLConnection连接=(HttpURLConnection)url
.openConnection();
int length=connection.getContentLength();
InputStream为=(InputStream)url.getContent();
字节[]图像数据=新字节[长度];
int buffersize=(int)Math.ceil(长度/(双精度)100);
int=0;
int-read;
while(下载<长度){
if(长度<缓冲区大小){
read=is.read(图像数据,下载,长度);
}否则,如果((length-download)关于AsyncTask的要点是活动(创建AsyncTask)中的主代码,则不等待。Async是asynchronous的缩写,这意味着在没有预先确定的时间范围的情况下发生的事情
如果您想在其他代码可以执行之前完成一次或多次下载,那么您要么需要以同步方式执行操作(在Android活动中不太好),要么需要编写代码以等待回调。)在后台执行。等待下载且继续执行其余代码的部分是。这可能是您要求的功能。您的问题毫无意义。doInBackground()
正在下载图像。它不能等待自己完成。@Commonware:我希望其余的代码等待下载完成我不希望代码继续,直到图像完成,因为我下载了多个图像,由于某些原因,它们重叠,我得到了两个相同的图像…?!显示代码,其中y您正在创建DownloadImageTask实例。您正在创建多个实例吗?如果是,这可能是您的问题。这是正确的,AsyncTask用法说明当doInBackground完成时,它会触发onPostExecute()。这都是在后台进行的,因此您必须通知您的UI线程任务已完成,并且可以从内存或其他地方加载图像。DSouza:我添加了onPostExecute(),但仍然存在相同的问题….????我更新了原始问题的代码