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(),但仍然存在相同的问题….????我更新了原始问题的代码