android doInBackground - PullRequest
       15

android doInBackground

1 голос
/ 23 апреля 2011

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

чем я могу заменить doInBackground(URL... paths), чтобы подождать загрузки, а затем продолжить с остальным кодом

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;

        }
    }
}

Ответы [ 2 ]

2 голосов
/ 23 апреля 2011

doInBackground () ) выполняется в фоновом режиме. Часть, которая waits for the download и continues with the rest of the code равна onPostExecute () . Это функция, которую вы, вероятно, запрашиваете.

0 голосов
/ 23 апреля 2011

Суть AsyncTask в том, что основной код в вашей активности (который создает AsyncTask) не ждет. Асинхронное сокращение от асинхронного - это означает что-то, что происходит без заранее определенного периода времени.

Если вы хотите, чтобы загрузка или несколько загрузок были завершены до того, как другой код может быть выполнен, то вам нужно либо выполнять действия синхронно (что не очень хорошо в Android Activity), либо вам нужно написать свой код для ожидания обратного вызова.

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