0

私はAsyncTaskを使用して、インターネットに接続し、データをダウンロードしてから、インターネットの写真を取得する操作を実行しています。

インターネットから取得した画像もありますが、サーバーが応答するのにかかると、アプリケーションはFCを取得します。

サーバーが必要ですが、データAsyncTaskを取得するにはどうすればよいですか?

次に、データのダウンロードに使用するコードを入力します。

class CargaImgs extends AsyncTask<Void, Void, Bitmap> {

    final ProgressDialog progressDialog = new ProgressDialog(imagen.this);

    protected void onPreExecute() {
        progressDialog.setTitle("");
        progressDialog.setMessage("Cargando Imagen...");
        progressDialog.show();
    }

    protected Bitmap doInBackground(Void... params) {
        return urlImageToBitmap(imageUrl(StrUrl));
    }

    protected void onPostExecute(Bitmap imagen) {
        RawBmp = imagen;
        sourceBmp = RawBmp;
        sourceBmp = redimensionarImagenMaximo(sourceBmp, screen_w, screen_h);
        imageWidth = sourceBmp.getWidth();
        imageHeight = sourceBmp.getHeight();
        showBmp = Bitmap.createBitmap(sourceBmp);
        main.invalidate();
        primera_carga = false;
        progressDialog.dismiss();
    }
}

private String imageUrl(String url) {
    Document doc = null;
    try {
        doc = Jsoup.connect(url).get();
    } catch (IOException e1) {
        e1.printStackTrace();
    }
    Elements div_exterior = doc.getElementsByClass("inner");
    for (Element subelementos : div_exterior) {
        Elements imgs = subelementos.getElementsByTag("img");
        StrUrlImage = imgs.get(1).attr("src");
        if (StrUrlImage == StrUrlImage2) {

        } else {
            return imgs.get(1).attr("src");
        }
    }
    return null;
}

public Bitmap urlImageToBitmap(String urlImage) {
    Bitmap mIcon1 = null;
    URL url_value;
    try {
        url_value = new URL(urlImage);
        if (url_value != null) {
            mIcon1 = BitmapFactory.decodeStream(url_value.openConnection()
                    .getInputStream());
        }
    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

    return mIcon1;
}
4

1 に答える 1

0

描画時に main.invalidate() を使用しないでください (AsyncTask を実行するたびに、ビュー全体を再度描画します) むしろ、ビットマップを目的のビューに設定するか、そのビューのみを無効にします。

public Bitmap urlImageToBitmap(String urlImage) {
    Bitmap mIcon1 = null;
    URL url_value;
    try {
        url_value = new URL(urlImage);
        if (url_value != null) {

            URLConnection conn = url_value.openConnection();
            conn.setConnectTimeout(10000);

            mIcon1 = BitmapFactory.decodeStream(conn.getInputStream());
        }
    } catch (SocketTimeoutException e) {
        e.printStackTrace();
    }catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

    return mIcon1;
}

また、postExecute に関しては、doInBackground で例外が発生すると null が返されるため、null ポインタ例外が発生する可能性があります。そのため、実行後に処理します。

于 2012-09-20T11:05:40.560 に答える