2014-03-06 3 views
2

각 연락처와 연관된 imageURL 문자열을 가진 많은 "연락처"개체가 있습니다. ListView에 이미지를 넣는 방법은 수동으로 이미지를 "드로어 블"폴더에 넣고 리소스를 호출하는 방법이 있습니다. 수동으로 이미지를 입력하면이 목적을 무효화합니다. 내 getView 메소드를 제공했고 주석 처리 된 라인은 혼란 스럽다.Android ImageView - URL에서 이미지로드

public View getView(int position, View convertView, ViewGroup parent) { 
    LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    View row = inflater.inflate(R.layout.single_row, parent, false); 
    TextView name = (TextView) row.findViewById(R.id.topLine); 
    TextView phone = (TextView) row.findViewById(R.id.secondLine); 
    ImageView icon = (ImageView) row.findViewById(R.id.icon); 

    name.setText(contactArray.get(position).getName()); 
    phone.setText((CharSequence) contactArray.get(position).getPhone().getWorkPhone()); 
    //icon.setImage from contactArray.get(position).getImageURL(); ???? 

    return row; 
} 

답변

2

로드 이미지는 다음과 같습니다.

URL url = new URL(contactArray.get(position).getImageURL()); 
Bitmap bmp = BitmapFactory.decodeStream(url.openConnection().getInputStream()); 
icon.setImageBitmap(bmp); 

아마도 더 포괄적 인 방법을 찾고 매우 큰 데이터 세트를 갖고 있다면. 도서관에 Android-Universal-Image-Loader을 사용하시기 바랍니다.

26

listView를 사용하는 동안 이미지를 비동기 적으로로드해야합니다. 그렇지 않으면보기가 정지되고 ANR의 경우입니다. 다음은 이미지를 비동기 적으로로드하는 완전한 코드 예제입니다.
사용자 지정 어댑터 내에이 클래스를 만듭니다.

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

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

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

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

이제 다음과 같이 이미지를 매우 쉽게로드 할 수 있습니다.

new ImageDownloader(imageView).execute("Image URL will go here"); 

이 솔루션은 명확하고 간단

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

파일 프로젝트의 Manifest.xml에 다음과 같은 권한을 추가하는 것을 잊지 마십시오. 고마워, 내가 정확히 찾고 있었던거야. – tryp

+0

나는 android dev에 익숙하다. 어디에 mafnifest xml에이 줄을 넣을까요? –

관련 문제