0

URL からビットマップを取得しようとしていますが、その方法がわかりません。これは私が使用している URL です。

String imgurl = "http://api.twitter.com/1/users/profile_image/859486608";

これが私の方法です

public  Bitmap loadBitmap(String imgPath) {
    String imgUrlStr = imgPath;
    Bitmap bitmap = null;
    try {
        bitmap = BitmapFactory.decodeStream((InputStream)new URL(imgUrlStr).getContent());
    }
    catch (MalformedURLException e) {
        e.printStackTrace();
    }
    catch (IOException e) {
        e.printStackTrace();
    }
    return bitmap;
}

これはログ出力です:

11-08 14:41:23.471: WARN/System.err(2682): java.io.IOException: Stream is closed
11-08 14:41:23.481: WARN/System.err(2682):     at java.io.BufferedInputStream.read(BufferedInputStream.java:316)
11-08 14:41:23.481: WARN/System.err(2682):     at java.io.FilterInputStream.read(FilterInputStream.java:130)
11-08 14:41:23.481: WARN/System.err(2682):     at com.ideal.self.Exa_LoadImageUrlActivity.loadImageFromUrl(Exa_LoadImageUrlActivity.java:73)
11-08 14:41:23.481: WARN/System.err(2682):     at com.ideal.self.Exa_LoadImageUrlActivity.onCreate(Exa_LoadImageUrlActivity.java:35)
11-08 14:41:23.481: WARN/System.err(2682):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
11-08 14:41:23.481: WARN/System.err(2682):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
11-08 14:41:23.491: WARN/System.err(2682):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
11-08 14:41:23.491: WARN/System.err(2682):     at android.app.ActivityThread.access$2300(ActivityThread.java:125)
11-08 14:41:23.491: WARN/System.err(2682):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
11-08 14:41:23.491: WARN/System.err(2682):     at android.os.Handler.dispatchMessage(Handler.java:99)
11-08 14:41:23.491: WARN/System.err(2682):     at android.os.Looper.loop(Looper.java:123)
11-08 14:41:23.491: WARN/System.err(2682):     at android.app.ActivityThread.main(ActivityThread.java:4627)
11-08 14:41:23.491: WARN/System.err(2682):     at java.lang.reflect.Method.invokeNative(Native Method)
11-08 14:41:23.491: WARN/System.err(2682):     at java.lang.reflect.Method.invoke(Method.java:521)
11-08 14:41:23.491: WARN/System.err(2682):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
11-08 14:41:23.501: WARN/System.err(2682):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
11-08 14:41:23.501: WARN/System.err(2682):     at dalvik.system.NativeStart.main(Native Method)
4

2 に答える 2

0

非同期タスクを使用してURLから画像を読み込むことをお勧めします...次のようにしてみてください。

ImageDownloader().execute(your image URL);

private class ImageDownloader extends AsyncTask<String, Integer, Bitmap>
{
    protected void onPreExecute()
    {
    }

    @Override
    protected Bitmap doInBackground(String... params)
    {
        try
        {
            URL url = new URL(params[0]);
            HttpURLConnection httpCon = (HttpURLConnection)url.openConnection();
            if(httpCon.getResponseCode() != 200)throw new Exception("Failed to connect");
            InputStream is = httpCon.getInputStream();
            return BitmapFactory.decodeStream(is);
        }catch(Exception e){
            Log.e("Image","Failed to load image",e);
        }
        return null;
    }

    protected void onPostExecute(Bitmap img){
        ImageView iv = (ImageView)findViewById(R.id.img);
        if(iv!=null && img!=null)
        {
            iv.setImageBitmap(img);
        }
    }
}

これがお役に立てば幸いです:)

于 2012-11-08T09:31:15.077 に答える
0

ImageLoader.java ( libs-for-android - Android プラットフォーム用のライブラリのコレクション)から ImageLoader クラスを取得するだけです。

以下のようにコンストラクター呼び出しを行います。

imageLoader = new ImageLoader(YourActivityName.this);

そして、以下のコードを使用して画像を表示します。

imageView.setTag(ImageURL);
imageLoader.DisplayImage(ImageURL, ActivityName.this, imageView);
于 2012-11-08T10:12:55.900 に答える