6

URL から画像をダウンロードしていますが、ダウンロードが完了しても画像が変更されません。以下のコードを入力していますが、同じ経験をした人はいますか?

Javaファイル

public class MyImgActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    ImageView imgView =(ImageView)findViewById(R.id.imageView1);
    Drawable drawable = LoadImageFromWebOperations("http://www.gophoto.it/view.php?i=http://1.bp.blogspot.com/-2LTvCCufBKc/T3L3KgcTj2I/AAAAAAAABbQ/Ki60e1LU9sE/s1600/Sachin%2BTendulkar.png");

    imgView.setImageDrawable(drawable);
 }
private Drawable LoadImageFromWebOperations(String url) {
    try
      {
       InputStream is = (InputStream) new URL(url).getContent();
       Drawable d = Drawable.createFromStream(is, "src name");
       return d;
      }catch (Exception e) {
       System.out.println("Exc="+e);
       return null;
      }
}
}

XMLファイル

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >

<ImageView 
    android:id="@+id/imageView1"
    android:layout_height="match_parent" 
    android:layout_width="match_parent"></ImageView>
</LinearLayout>

Manifestファイル

<uses-permission android:name="android.permission.INTERNET"/>
4

4 に答える 4

17

以下のコードを使用して、画像をダウンロードして imageview に表示してください。

public class image extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        Bitmap bitmap = DownloadImage("http://www.gophoto.it/view.php?i=http://1.bp.blogspot.com/-2LTvCCufBKc/T3L3KgcTj2I/AAAAAAAABbQ/Ki60e1LU9sE/s1600/Sachin%2BTendulkar.png");
        ImageView img = (ImageView) findViewById(R.id.img);
        img.setImageBitmap(bitmap);
    }

    private InputStream OpenHttpConnection(String urlString) throws IOException {
        InputStream in = null;
        int response = -1;

        URL url = new URL(urlString);
        URLConnection conn = url.openConnection();

        if (!(conn instanceof HttpURLConnection))
            throw new IOException("Not an HTTP connection");

        try {
            HttpURLConnection httpConn = (HttpURLConnection) conn;
            httpConn.setAllowUserInteraction(false);
            httpConn.setInstanceFollowRedirects(true);
            httpConn.setRequestMethod("GET");
            httpConn.connect();
            response = httpConn.getResponseCode();
            if (response == HttpURLConnection.HTTP_OK) {
                in = httpConn.getInputStream();
            }
        } catch (Exception ex) {
            throw new IOException("Error connecting");
        }
        return in;
    }

    private Bitmap DownloadImage(String URL) {
        Bitmap bitmap = null;
        InputStream in = null;
        try {
            in = OpenHttpConnection(URL);
            bitmap = BitmapFactory.decodeStream(in);
            in.close();
        } catch (IOException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        return bitmap;
    }
}
于 2012-08-29T08:19:19.800 に答える
3

次のコードは次の URL で動作しますが、あなたの URL では動作しません。問題は画像サイズにあります。動作する別の URL で試してください。

public class MyImgActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        ImageView imgView =(ImageView)findViewById(R.id.imageView1);
        URL url = null;
        Bitmap bmp = null;
        try {
            url = new URL("http://www.seobook.com/images/smallfish.jpg");
            bmp = BitmapFactory.decodeStream(url.openConnection().getInputStream());
        } catch (MalformedURLException e) {

        }catch (IOException e) {

        }
       imgView.setImageBitmap(bmp); 
      }

    }
于 2012-08-29T07:59:57.303 に答える
1
 try
  {

   URL murl = new URL(url)
  URLConnection ucon = murl.openConnection();
  InputStream is = ucon.getInputStream();
   Drawable d = Drawable.createFromStream(is, "src name");
   return d;
  }catch (Exception e) {
   System.out.println("Exc="+e);
   return null;
  }

ダウンロードメソッド内でこのcoseを使用し、接続速度が遅い場合は、スレッドを使用してダウンロードし、ハンドラを使用して画像を投稿します... @Hirenで説明されているように

于 2012-08-29T09:12:16.380 に答える
0

以下のコードを試してください、

URLを次のように変更するだけです。

URL

onCreate

new Thread(new Runnable() {

        @Override
        public void run() {
            // TODO Auto-generated method stub
            drawable = LoadImageFromWebOperations("http://1.bp.blogspot.com/-2LTvCCufBKc/T3L3KgcTj2I/AAAAAAAABbQ/Ki60e1LU9sE/s1600/Sachin%2BTendulkar.png");
            handler.sendEmptyMessage(0);
        }
    }).start();

ハンドラーを使用して画像をダウンロードした後に画像を設定する

Handler handler = new Handler(){
    @Override
    public void handleMessage(android.os.Message msg) {
        imgView.setImageDrawable(drawable);
        Log.i("System out","after set the image...");
    }
};

お役に立てば幸いです...

于 2012-08-29T09:00:57.103 に答える