문제

당신은 어떻게 사용하는 이미지에서 참조 URL 에 ImageView?

도움이 되었습니까?

해결책 5

어쨌든 사람들은 내 의견에 답변으로 게시하도록 요청합니다. 나는 게시하고있다.

URL newurl = new URL(photo_url_str); 
mIcon_val = BitmapFactory.decodeStream(newurl.openConnection().getInputStream());
profile_photo.setImageBitmap(mIcon_val);

감사해요.

다른 팁

에서 안드로이드 개발자:

// show The Image in a ImageView
new DownloadImageTask((ImageView) findViewById(R.id.imageView1))
            .execute("http://java.sogeti.nl/JavaBlog/wp-content/uploads/2009/04/android_icon_256.png");

public void onClick(View v) {
    startActivity(new Intent(this, IndexActivity.class));
    finish();

}

private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {
    ImageView bmImage;

    public DownloadImageTask(ImageView bmImage) {
        this.bmImage = bmImage;
    }

    protected Bitmap doInBackground(String... urls) {
        String urldisplay = urls[0];
        Bitmap mIcon11 = null;
        try {
            InputStream in = new java.net.URL(urldisplay).openStream();
            mIcon11 = BitmapFactory.decodeStream(in);
        } catch (Exception e) {
            Log.e("Error", e.getMessage());
            e.printStackTrace();
        }
        return mIcon11;
    }

    protected void onPostExecute(Bitmap result) {
        bmImage.setImageBitmap(result);
    }
}

다음과 같은 권한이 설정되어 있는지 확인하십시오. AndroidManifest.xml 인터넷에 액세스하려면.

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

1. 피카소 응용 프로그램에서 번거롭지 않은 이미지로드가 가능합니다.

Gradle 사용 :

implementation 'com.squareup.picasso:picasso:2.71828'

한 줄의 코드!

Picasso.get().load("http://i.imgur.com/DvpvklR.png").into(imageView);

2. 활주 부드러운 스크롤에 중점을 둔 안드로이드 용 이미지 로딩 및 캐싱 라이브러리

Gradle 사용 :

repositories {
  mavenCentral() 
  google()
}

dependencies {
   implementation 'com.github.bumptech.glide:glide:4.7.1'
   annotationProcessor 'com.github.bumptech.glide:compiler:4.7.1'
}

// 간단한보기 :

  Glide.with(this).load("http://i.imgur.com/DvpvklR.png").into(imageView);

3. 프레스코 Fresco는 이미지로드 및 디스플레이를 관리하므로 필요하지 않습니다.

프레스코를 시작하는 것

먼저 이미지를 다운로드해야합니다

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;
}

그런 다음 ImageView.SetImageBitMap을 사용하여 BitMap을 ImageView로 설정하십시오.

나는 다양한 프로젝트에서 반복적 인 요구로 보이기 때문에 이것을 처리하기 위해 수업을 썼습니다.

https://github.com/koush/urlimageviewhelper

UrlimageViewHelper는 URL에서 발견 된 이미지로 ImageView를 채 웁니다.

샘플은 Google 이미지 검색을 수행하고 결과를 비동기로로드/표시합니다.

UrlimageViewHelper는 모든 이미지 URL을 BitMapDrawables를 자동으로 다운로드, 저장 및 캐시합니다. 중복 URL은 메모리에 두 번로드되지 않습니다. 비트 맵 메모리는 약한 참조 해시 테이블을 사용하여 관리되므로 이미지를 더 이상 사용하지 않으면 쓰레기가 자동으로 수집됩니다.

버튼 클릭을 기반으로 이미지를로드하는 경우 위의 허용 답변은 훌륭하지만 새 활동에서 수행하는 경우 UI가 1 ~ 2 회 동결됩니다. 주위를 둘러 보면서 간단한 비 동기화 가이 문제를 제거한 것을 발견했습니다.

Asynctask를 사용하려면 활동이 끝날 때이 클래스를 추가하십시오.

private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {
    ImageView bmImage;

    public DownloadImageTask(ImageView bmImage) {
        this.bmImage = bmImage;
    }

    protected Bitmap doInBackground(String... urls) {
        String urldisplay = urls[0];
        Bitmap mIcon11 = null;
        try {
            InputStream in = new java.net.URL(urldisplay).openStream();
            mIcon11 = BitmapFactory.decodeStream(in);
        } catch (Exception e) {
            Log.e("Error", e.getMessage());
            e.printStackTrace();
        }
        return mIcon11;
    }

    protected void onPostExecute(Bitmap result) {
        bmImage.setImageBitmap(result);
    }    
}

다음을 사용하여 oncreate () 메소드에서 호출하십시오.

new DownloadImageTask((ImageView) findViewById(R.id.imageView1))
        .execute(MY_URL_STRING);

결과는 빠르게로드 된 활동과 이미지 뷰가 사용자의 네트워크 속도에 따라 순간에 분할을 표시합니다.

이 loadingImageView보기를 사용하여 URL에서 이미지를로드 할 수도 있습니다.

http://blog.blundellapps.com/imageview-with-loading-spinner/

해당 링크에서 클래스 파일을 추가하면 URL 이미지보기를 인스턴스화 할 수 있습니다.

XML에서 :

<com.blundell.tut.LoaderImageView
  android:id="@+id/loaderImageView"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  image="http://developer.android.com/images/dialog_buttons.png"
 />

코드 :

final LoaderImageView image = new LoaderImageView(this, "http://developer.android.com/images/dialog_buttons.png");

다음을 사용하여 업데이트하십시오.

image.setImageDrawable("http://java.sogeti.nl/JavaBlog/wp-content/uploads/2009/04/android_icon_256.png");
public class LoadWebImg extends Activity {

String image_URL=
 "http://java.sogeti.nl/JavaBlog/wp-content/uploads/2009/04/android_icon_256.png";

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

       ImageView bmImage = (ImageView)findViewById(R.id.image);
    BitmapFactory.Options bmOptions;
    bmOptions = new BitmapFactory.Options();
    bmOptions.inSampleSize = 1;
    Bitmap bm = LoadImage(image_URL, bmOptions);
    bmImage.setImageBitmap(bm);
   }

   private Bitmap LoadImage(String URL, BitmapFactory.Options options)
   {       
    Bitmap bitmap = null;
    InputStream in = null;       
       try {
           in = OpenHttpConnection(URL);
           bitmap = BitmapFactory.decodeStream(in, null, options);
           in.close();
       } catch (IOException e1) {
       }
       return bitmap;               
   }

private InputStream OpenHttpConnection(String strURL) throws IOException{
 InputStream inputStream = null;
 URL url = new URL(strURL);
 URLConnection conn = url.openConnection();

 try{
  HttpURLConnection httpConn = (HttpURLConnection)conn;
  httpConn.setRequestMethod("GET");
  httpConn.connect();

  if (httpConn.getResponseCode() == HttpURLConnection.HTTP_OK) {
   inputStream = httpConn.getInputStream();
  }
 }
 catch (Exception ex)
 {
 }
 return inputStream;
}
}

안녕하세요 저는 가장 쉬운 코드가 있습니다

    public class ImageFromUrlExample extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);  
            ImageView imgView =(ImageView)findViewById(R.id.ImageView01);
            Drawable drawable = LoadImageFromWebOperations("http://www.androidpeople.com/wp-content/uploads/2010/03/android.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;
      }
    }
   }

main.xml

  <LinearLayout 
    android:id="@+id/LinearLayout01"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    xmlns:android="http://schemas.android.com/apk/res/android">
   <ImageView 
       android:id="@+id/ImageView01"
       android:layout_height="wrap_content" 
       android:layout_width="wrap_content"/>

이 시도

최근에 실을 찾았습니다 여기, 이미지와 함께 ListView에 대해 비슷한 일을해야하지만 (JLEEDEV)에 표시된 첫 번째 샘플 클래스에서 읽을 수 있듯이 원칙은 간단합니다. 이미지의 입력 스트림 (웹에서)을 얻을 수 있습니다.

private InputStream fetch(String urlString) throws MalformedURLException, IOException {
    DefaultHttpClient httpClient = new DefaultHttpClient();
    HttpGet request = new HttpGet(urlString);
    HttpResponse response = httpClient.execute(request);
    return response.getEntity().getContent();
}

그런 다음 이미지를 그림으로 저장하고 이미지 뷰 (setImagedRawable을 통해)로 전달할 수 있습니다. 상단 코드 스 니펫에서 다시 전체 스레드를 살펴보십시오.

InputStream is = fetch(urlString);
Drawable drawable = Drawable.createFromStream(is, "src");

여기에 많은 좋은 정보가 있습니다 ... 최근에 지금까지 잘 작동하는 것처럼 보이는 SmartImageview라는 클래스를 찾았습니다. 통합 및 사용이 매우 쉽습니다.

http://loopj.com/android-smart-image-view/

https://github.com/loopj/android-smart-image-view

업데이트: 나는 결국 a 이것에 대한 블로그 게시물, SmartImageView 사용에 대한 도움을 받으십시오.

두 번째 업데이트: 나는 이제 항상 이것 (위 참조)을 위해 피카소를 사용하고 그것을 강력히 추천합니다. :)

내 의견을위한 그러한 작업을위한 최고의 현대 도서관은 피카소 정사각형. One-Liner가있는 URL의 이미지를 ImageView에로드 할 수 있습니다.

Picasso.with(context).load("http://i.imgur.com/DvpvklR.png").into(imageView);

위에서 제안한대로 이것은 늦은 답변입니다 AsyncTask 윌과 인터넷 검색 후에 나는이 문제에 대한 한 가지 더 좋은 방법을 찾았습니다.

Drawable drawable = Drawable.createFromStream((InputStream) new URL("url").getContent(), "src");

imageView.setImageDrawable(drawable);

완전한 기능은 다음과 같습니다.

public void loadMapPreview () {
    //start a background thread for networking
    new Thread(new Runnable() {
        public void run(){
            try {
                //download the drawable
                final Drawable drawable = Drawable.createFromStream((InputStream) new URL("url").getContent(), "src");
                //edit the view in the UI thread
                imageView.post(new Runnable() {
                    public void run() {
                        imageView.setImageDrawable(drawable);
                    }
                });
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }).start();
}

다음 권한을 추가하는 것을 잊지 마십시오 AndroidManifest.xml 인터넷에 액세스하려면.

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

나는 이것을 직접 시도했지만 아직 어떤 문제도 직면하지 않았다.

imageView.setImageBitmap(BitmapFactory.decodeStream(imageUrl.openStream()));//try/catch IOException and MalformedURLException outside

이것은 당신에게 도움이 될 것입니다 ...

ImageView와로드 이미지를 정의합니다 .....

Imageview i = (ImageView) vv.findViewById(R.id.img_country);
i.setImageBitmap(DownloadFullFromUrl(url));

그런 다음이 방법을 정의하십시오.

    public Bitmap DownloadFullFromUrl(String imageFullURL) {
    Bitmap bm = null;
    try {
        URL url = new URL(imageFullURL);
        URLConnection ucon = url.openConnection();
        InputStream is = ucon.getInputStream();
        BufferedInputStream bis = new BufferedInputStream(is);
        ByteArrayBuffer baf = new ByteArrayBuffer(50);
        int current = 0;
        while ((current = bis.read()) != -1) {
            baf.append((byte) current);
        }
        bm = BitmapFactory.decodeByteArray(baf.toByteArray(), 0,
                baf.toByteArray().length);
    } catch (IOException e) {
        Log.d("ImageManager", "Error: " + e);
    }
    return bm;
}
    private Bitmap getImageBitmap(String url) {
        Bitmap bm = null;
        try {
            URL aURL = new URL(url);
            URLConnection conn = aURL.openConnection();
            conn.connect();
            InputStream is = conn.getInputStream();
            BufferedInputStream bis = new BufferedInputStream(is);
            bm = BitmapFactory.decodeStream(bis);
            bis.close();
            is.close();
       } catch (IOException e) {
           Log.e(TAG, "Error getting bitmap", e);
       }
       return bm;
    } 

이를 수행하는 간단하고 깨끗한 방법은 오픈 소스 라이브러리를 사용하는 것입니다. 초기.

    String img_url= //url of the image
    URL url=new URL(img_url);
    Bitmap bmp; 
    bmp=BitmapFactory.decodeStream(url.openConnection().getInputStream());
    ImageView iv=(ImageView)findviewById(R.id.imageview);
    iv.setImageBitmap(bmp);

이 코드는 테스트되었으며 완전히 작동합니다.

URL req = new URL(
"http://java.sogeti.nl/JavaBlog/wp-content/uploads/2009/04/android_icon_256.png"
);
Bitmap mIcon_val = BitmapFactory.decodeStream(req.openConnection()
                  .getInputStream());

ListView 그리드보기, 일반 레이아웃과 같은 컨테이너에서 ImageView 작업

 private class LoadImagefromUrl extends AsyncTask< Object, Void, Bitmap > {
        ImageView ivPreview = null;

        @Override
        protected Bitmap doInBackground( Object... params ) {
            this.ivPreview = (ImageView) params[0];
            String url = (String) params[1];
            System.out.println(url);
            return loadBitmap( url );
        }

        @Override
        protected void onPostExecute( Bitmap result ) {
            super.onPostExecute( result );
            ivPreview.setImageBitmap( result );
        }
    }

    public Bitmap loadBitmap( String url ) {
        URL newurl = null;
        Bitmap bitmap = null;
        try {
            newurl = new URL( url );
            bitmap = BitmapFactory.decodeStream( newurl.openConnection( ).getInputStream( ) );
        } catch ( MalformedURLException e ) {
            e.printStackTrace( );
        } catch ( IOException e ) {

            e.printStackTrace( );
        }
        return bitmap;
    }
/** Usage **/
  new LoadImagefromUrl( ).execute( imageView, url );

예외 처리 및 비동기 작업이있는 버전 :

AsyncTask<URL, Void, Boolean> asyncTask = new AsyncTask<URL, Void, Boolean>() {
    public Bitmap mIcon_val;
    public IOException error;

    @Override
    protected Boolean doInBackground(URL... params) {
        try {
            mIcon_val = BitmapFactory.decodeStream(params[0].openConnection().getInputStream());
        } catch (IOException e) {
            this.error = e;
            return false;
        }
        return true;
    }

    @Override
    protected void onPostExecute(Boolean success) {
        super.onPostExecute(success);
        if (success) {
            image.setImageBitmap(mIcon_val);
        } else {
            image.setImageBitmap(defaultImage);
        }
    }
};
try {
    URL url = new URL(url);
    asyncTask.execute(url);
} catch (MalformedURLException e) {
    e.printStackTrace();
}

이 방법을 시도해보십시오. 이것이 문제를 해결하는 데 도움이되기를 바랍니다.

여기에서는 AsyncTask 방식으로 URL/Server의로드 이미지에 대한 "AndroidQuery"외부 라이브러리를 사용하는 방법에 대해 설명합니다.

  • "AndroidQuery"라이브러리를 다운로드하십시오 여기에서
  • 이 항아리를 프로젝트 Lib 폴더로 복사/붙여 넣고이 라이브러리를 Project Build-Path에 추가하십시오.
  • 이제 사용 방법에 대한 데모를 보여줍니다.

Activity_Main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center">

        <FrameLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content">

            <ImageView
                android:id="@+id/imageFromUrl"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:adjustViewBounds="true"/>
            <ProgressBar
                android:id="@+id/pbrLoadImage"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"/>

        </FrameLayout>
    </LinearLayout>

MainActivity.java

public class MainActivity extends Activity {

private AQuery aQuery;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    aQuery = new AQuery(this);
    aQuery.id(R.id.imageFromUrl).progress(R.id.pbrLoadImage).image("http://itechthereforeiam.com/wp-content/uploads/2013/11/android-gone-packing.jpg",true,true);
 }
}

Note : Here I just implemented common method to load image from url/server but you can use various types of method which can be provided by "AndroidQuery"to load your image easily.

안드로이드 쿼리 처리할 수 있습니다 당신을 위해 그리고 훨씬 더 많은 것(캐시 같 및로드 진행).

살펴보 .

내가 생각하는 가장 좋은 방법입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top