0

インターネットから写真を取得したいのでsetImageURIを使用していますが、できないようですが、同じ関数でsetImageResource(R.drawable。)を使用すると機能します... setImageURIのエラーを修正するにはどうすればよいですか?

public View getView(int position, View convertView, ViewGroup parent) {
        ImageView i = new ImageView(mContext);

        //this is working 
        int p = R.drawable.fb;
        i.setImageResource(p);

        //this is not working
        i.setImageURI(Uri.parse("http://www.vaultads.com/wp-content/uploads/2011/03/google-adsense.jpg"));


        return i;
    }
4

2 に答える 2

1

インターネットから写真を取得したいのでsetImageURIを使用しますが、できないようですが、 setImageResource(R.drawable.) を使用すると

最も重要なこと

setImageResource は同期であるため正しく実行されますが、URL からの setImageURI は非同期操作であり、UI スレッドとは別のスレッドで実行する必要があります

次のスニペットが役立ちます。

new Thread() {

    public void run() {
        try {
            url = new URL("http://www.vaultads.com/wp-content/uploads/2011/03/google-adsense.jpg");
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }
        try {
            image = BitmapFactory.decodeStream(url.openStream());
        } catch (IOException e) {
            e.printStackTrace();
        }
        runOnUiThread(new Runnable() {

            @Override
            public void run() {

                i.setImageBitmap(image);
            }
        });
    }
}.start();

それでもうまくいかない場合は、他に3つのオプションがあります

オプション1

URL myUrl = new URL("http://www.vaultads.com/wp-content/uploads/2011/03/google-adsense.jpg");
InputStream inputStream = (InputStream)myUrl.getContent();
Drawable drawable = Drawable.createFromStream(inputStream, null);
i.setImageDrawable(drawable);

オプション2

try {
  Bitmap bitmap = BitmapFactory.decodeStream((InputStream)new URL("http://www.vaultads.com/wp-content/uploads/2011/03/google-adsense.jpg").getContent());
  i.setImageBitmap(bitmap); 
} catch (MalformedURLException e) {
  e.printStackTrace();
} catch (IOException e) {
  e.printStackTrace();
}

オプション3

public static Bitmap loadBitmap(String url) {
    Bitmap bitmap = null;
    InputStream in = null;
    BufferedOutputStream out = null;

    try {
        in = new BufferedInputStream(new URL(url).openStream(), IO_BUFFER_SIZE);

        final ByteArrayOutputStream dataStream = new ByteArrayOutputStream();
        out = new BufferedOutputStream(dataStream, IO_BUFFER_SIZE);
        copy(in, out);
        out.flush();

        final byte[] data = dataStream.toByteArray();
        BitmapFactory.Options options = new BitmapFactory.Options();
        //options.inSampleSize = 1;

        bitmap = BitmapFactory.decodeByteArray(data, 0, data.length,options);
    } catch (IOException e) {
        Log.e(TAG, "Could not load Bitmap from: " + url);
    } finally {
        closeStream(in);
        closeStream(out);
    }

    return bitmap;
}

   i.setImageBitmap(loadBitmap("http://www.vaultads.com/wp-content/uploads/2011/03/google-adsense.jpg")); 
于 2012-06-22T04:21:59.247 に答える
0

その画像の URL は私には機能しません。

インターネットから画像をダウンロードするには、別の方法をお勧めします。setImageURIから呼び出すとgetView、UI スレッドで実行されるため、ネットワークから画像が返されるまでアプリがフリーズします。また、画像はキャッシュされないため、同じ画像を何度もダウンロードする可能性があります。

画像のダウンロードを簡素化できる Android 用のImageLoaderライブラリを確認してください。バックグラウンドでダウンロードを処理し、複数のリクエストを同時に処理し、画像をキャッシュします。

于 2012-06-22T03:18:35.087 に答える