web-dev-qa-db-fra.com

Comment obtenir une image du site Web dans imageview dans Android

J'essaie d'obtenir une image dans ImageView à partir du site Web mais l'image ne s'affiche pas de la sorte, Quel est le problème dans ce code? Il s'agit de l'URL de image

C'est mon activité principale

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;

    }
}}

dans le fichier 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>

mon manifeste Android

<?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

Faire du réseau IO dans le thread principal est mauvais. Mieux vaut éviter.

Aussi - votre accès aux ressources de l'URL est faux.

Utilisez quelque chose comme ceci à la place:

 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();

C’est l’ancienne méthode de chargement des ressources d’URL dans l’affichage. Franchement, je n'ai pas écrit ce code dans un long time. Volley et Picasso le fait simplement beaucoup mieux Que moi, y compris un cache local transparent, la gestion de plusieurs threads de chargeur et Permettant des politiques efficaces de redimensionnement avant chargement. Tout sauf le café :)

17
Gilad Haimov

Essayez-le avec Picasso . Cela devrait vous prendre presque une ligne complète de code et moins d'une minute pour le configurer. 

Dans votre cas, ce serait: 

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

Si vous allez charger plusieurs images à partir d'URL dans votre application, vous devez absolument vous pencher sur:

"Universal Image Loader" de nostra13

C'est une bibliothèque géniale avec des tonnes de fonctionnalités pour afficher des images à partir d'URL, de la conversion en bitmaps, etc.

Une fois que vous avez inclus la classe et déclaré la configuration imageloader + imageloader, c’est aussi simple que cela:

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

Où imageView est l'imageView dans lequel vous souhaitez que l'image apparaisse.

1
Jonny07

Votre problème n'est pas dans le code mais avec le serveur. Essayez cet exemple d'URL et dites-moi si ça marche:

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

0
Ilya Gazman