2014-01-20 2 views
2

내부 일부 네트워크 작업을 수행하는 좀 사용자를 표시리스트 뷰가 있습니다. 내 스레드 내부에 넣을 수 있습니다내가 안드로이드에 대한 응용 프로그램을 개발하고 어댑터

private class StableArrayAdapter extends ArrayAdapter<Request>{ 
    private Context context; 
    private Bitmap tempobmp; 
    private List<User> mylist; 
    public StableArrayAdapter(Context context,List<User> mylist){ 
     super(context, R.layout.request_layout, mylist); 
     this.context = context; 
     this.mylist = mylist; 
    } 
    public class ViewHolder{ 
     public ImageView image; 
     } 
    public View getView(int position,View convertView,ViewGroup parent){ 
     View vi = convertView; 
     if(vi==null){ 
      ViewHolder holder = new ViewHolder() 
      holder.image = (ImageView) vi.findViewById(R.id.requestImage); 
     } 
     final ViewHolder holder = (ViewHolder) vi.getTag(); 
     User s = mylist.get(position); 
     try{ 

      final URL url = new URL(myapp.getUser().getPhoto().getS3Url()); 
      Thread thread = new Thread(new Runnable() { 
        @Override 
        public void run() { 
         try{ 
         InputStream is = (InputStream) url.getContent(); 

         Bitmap bmp = BitmapFactory.decodeStream(is); 

         tempobmp=bmp; 

         } 
         catch(Exception e){ 
          Log.d("eeeeA52","eeeeA52"+e); 
         } 
        } 
      }); 
      thread.start(); 
      thread.wait(); 

     } 
     catch(Exception e){ 
      Log.d("eeeeAF","eeeeAF"+e); 
     } 
     holder.image.setImageBitmap(tempobmp); 
     return vi; 
    } 

모든 로그를 내 데이터베이스에서 비트 맵을 얻기 위해 아무런 문제가 없음을 말해하지만 때 내가 : 그래서 나는 다음과 같이 할 수 있도록이 목록보기 내에서 자신의 사진을 표시 할 이 ListView를 사용하여 페이지를 시작하면 이미지가 여전히 기본 이미지입니다. 어댑터에서 네트워크 데이터를 검색하는 스레드를 사용할 수 있습니까? 그렇다면 어떤 것이 가장 좋은 방법입니까?

는이 네트워크 어댑터에서 직접 통화를 할 수있는 좋은 생각 간주, 일반적으로 너희들 :

+1

매우 비용이 많이 들며, 목록보기를 만들기 전에 사용자 목록과 이미지 목록을 만들려고 시도합니다. –

+1

AsyncTask를 사용할 수 있습니다. 백그라운드 스레드에서 좀 더 긴 처리를 수행하고 결과를 UI 스레드에 편리하게 적용 할 수 있습니다. 이는 어댑터 내에서 가능합니다. 백그라운드 작업이 끝나면 어댑터의 notifyDataSetChanged를 호출하여 변경 내용을 볼 수 있습니다. 당신이 내부 어댑터의 상태를 업데이트하지 않는 것이 확인하여 백그라운드 스레드에서 (즉, 등의 항목 개수와 같은 뷰를 렌더링하는 데 사용 될 수 있습니다). 이러한 변경은 UI 스레드에서만 수행하는 것이 안전합니다. – tiguchi

+0

그래서 난 내 AsyncTask를의 onPostExecute 메도 내 UI 변수를 업데이트해야합니까? – Pclaverie

답변

2

감사드립니다. 당신이 실제로 전에 목록보기를 채우기로 활동/조각에서 다운로드를 할 수 없다면, 당신은 단지에 대한 networkimageview 개체가 Volley처럼 이렇게 많은 라이브러리 중 하나를 사용할 수 있습니다. 또는 Picasso 라이브러리를 사용하여 넷에서 이미지를 다운로드하고 일반 이미지로 표시하도록 특별히 빌드 할 수 있습니다.

둘 다 잘 문서화되어 있고 사용하기 쉽습니다. (피카소는 1 줄의 코드가 필요함)

관련 문제