web-dev-qa-db-ja.com

androidのimageviewでURLウェブサイトから画像を取得する方法

URL WebサイトからImageViewで画像を取得しようとしていますが、画像が表示されません。このコードの何が問題になっていますか?これは image のURLです。

それが私の主な活動です

ImageView i;
private Bitmap bitmap;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    i=(ImageView)findViewById(R.id.ImageView1);




    bitmap=GetBitmapfromUrl("http://test-dashboard1.seeloz.com/system/images/products_images/86/5454544114_1401886223?1401886223");
    i.setImageBitmap(bitmap);


}


public Bitmap GetBitmapfromUrl(String scr) {
    try {
        URL url=new URL(scr);
        HttpURLConnection connection=(HttpURLConnection)url.openConnection();
        connection.setDoInput(true);
        connection.connect();
        InputStream input=connection.getInputStream();
        Bitmap bmp = BitmapFactory.decodeStream(input);
        return bmp;



    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        return null;

    }
}}

xMLファイル内

<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:tools="http://schemas.Android.com/tools"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:paddingBottom="@dimen/activity_vertical_margin"
    Android:paddingLeft="@dimen/activity_horizontal_margin"
    Android:paddingRight="@dimen/activity_horizontal_margin"
    Android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <ImageView
        Android:id="@+id/imageView1"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_alignParentLeft="true"
        Android:layout_alignParentTop="true"
        Android:layout_marginLeft="85dp"
        Android:layout_marginTop="179dp"
        Android:src="@drawable/ic_launcher" />

</RelativeLayout>

私のAndroidManifest

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
    package="com.example.image"
    Android:versionCode="1"
    Android:versionName="1.0" >

    <uses-sdk
        Android:minSdkVersion="8"
        Android:targetSdkVersion="17" />
<uses-permission Android:name="Android.permission.INTERNET"/>
    <application
        Android:allowBackup="true"
        Android:icon="@drawable/ic_launcher"
        Android:label="@string/app_name"
        Android:theme="@style/AppTheme" >
        <activity
            Android:name="com.example.image.MainActivity"
            Android:label="@string/app_name" >
            <intent-filter>
                <action Android:name="Android.intent.action.MAIN" />

                <category Android:name="Android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>
7
user3798394

メインスレッドでネットワークIOを実行するのは悪です。避ける方がよいでしょう。

また、URLリソースへのアクセスが間違っています。

代わりに次のようなものを使用してください。

 private Bitmap bmp;

   new AsyncTask<Void, Void, Void>() {                  
        @Override
        protected Void doInBackground(Void... params) {
            try {
                InputStream in = new URL(IMAGE_URL).openStream();
                bmp = BitmapFactory.decodeStream(in);
            } catch (Exception e) {
               // log error
            }
            return null;
        }

        @Override
        protected void onPostExecute(Void result) {
            if (bmp != null)
                imageView.setImageBitmap(bmp);
        }

   }.execute();

これは、URLリソースをディスプレイにロードする「古い方法」です。率直に言って、私はそのようなコードをlong時間で書いていません。 Volley および Picasso 透過的なローカルキャッシュ、複数のローダースレッド管理、効果的なロード前のサイズ変更ポリシーの有効化など、私よりもはるかに優れています。コーヒー以外はすべて:)

17
Gilad Haimov

ピカソ で試してみてください。コードはほぼ1行で、セットアップには1分もかかりません。

あなたの場合、それは次のようになります。

Picasso.with(context).load(""http://imageurlgoeshere").into(i);
7
appoll

アプリのURLから複数の画像を読み込む場合は、次のことを確認する価値があります。

nostra13の「ユニバーサルイメージローダー」

これは、URLから画像を表示したり、ビットマップにキャストしたりするための多数の機能を備えた素晴らしいライブラリです。

クラスをインクルードし、imageloader + imageloader構成を宣言すると、次のように簡単になります。

imageLoader.displayImage("http://www.yoursite.com/my_picture.png", imageView);

ImageViewは、画像を表示するimageViewです。

1
Jonny07

問題はコードではなくサーバーにあります。このサンプルURLを試して、機能しているかどうかを教えてください。

http://cdn.sstatic.net/stackoverflow/img/Apple-touch-icon.png

0
Ilya Gazman