0

나는 listview 및 사용자 정의 어댑터를 사용합니다. 어댑터로드 이미지 저장 및 다운로드 stroge 및 표시.안드로이드리스트 뷰로드 이미지 저장 및 다운로드

문제는 이미지 파일이 임의의 사진으로 보일 때까지 모든 파일을 다운로드하고 설치하십시오. 다운로드가 완료되면 모든 사진이 정상적으로 보입니다.

public class NewsListAdapter extends ArrayAdapter<NewsData>{ 
List<NewsData> items; 
Context context; 
public HaberListAdapter(Context context, int textViewResourceId,List<NewsData> haberArray) { 
    super(context, textViewResourceId, haberArray); 
    this.items = haberArray; 
    this.context=context; 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    ViewHolder holder; 
    View v=convertView; 
    if (v == null) { 
     LayoutInflater vi = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     v = vi.inflate(R.layout.custom_haber_list, null); 
     holder = new ViewHolder(); 

     holder.txtCaption = (TextView) v.findViewById(R.id.txtCaption); 
     holder.txtContent = (TextView) v.findViewById(R.id.txtContent); 
     holder.txtDate= (TextView) v.findViewById(R.id.txtDate); 
     holder.imageView= (ImageView) v.findViewById(R.id.image); 

     v.setTag(holder); 
    }else{ 
     holder=(ViewHolder)v.getTag(); 
    } 


    final NewsData o = items.get(position); 


    if (o != null) { 
     holder.txtCaption.setText(o.getCaption()); 
     holder.txtContent.setText(o.getContent()); 
     holder.txtDate.setText(o.getTarih()); 

     if (o.getimageStatus()==0) 
     { 
      String[] params={ String.valueOf(o.getID()),o.getImageWebUrl()}; 
      new setDownloadImage(holder.imageView,position).execute(params); 
     } 
     else 
     { 
      String imagePath = context.getFilesDir().toString() +"/news"+o.getID()+".jpg"; 
      File fs=new File(imagePath); 
      if (fs.exists()) 
       holder.imageView.setImageDrawable(Drawable.createFromPath(imagePath)); 
      else 
      { 
       dataBase db=new dataBase(context); 
       db.setimageStatus(o.getID(), 0); 
      } 
     } 
    } 
    if (position % 2 == 0) 
     v.setBackgroundColor(Color.WHITE); 
    else 
     v.setBackgroundColor(Color.parseColor("#D4E4FD")); 
    return v; 

} 

class ViewHolder { 

    public TextView txtCaption,txtContent,txtDate; 
    public ImageView imageView; 

} 



class setDownloadImage extends AsyncTask<String,String,String> 
{ 
    private int position; 
    private final WeakReference<ImageView> imageViewReference; 
    public setDownloadImage(ImageView imageView,int position) 
    { 
     this.position=position; 
     imageViewReference = new WeakReference<ImageView>(imageView); 
    } 
    @Override 
    protected String doInBackground(String... params) { 
     String f_url=params[1]; 
     String id=params[0]; 
     int count; 
     try { 
      URL url = new URL(f_url); 
      URLConnection conection = url.openConnection(); 
      conection.connect(); 
      InputStream input = new BufferedInputStream(url.openStream(), 8192); 
      OutputStream output = new FileOutputStream(context.getFilesDir()+"/news"+id+".jpg"); 
      byte data[] = new byte[1024]; 
      while ((count = input.read(data)) != -1) { 
       output.write(data, 0, count); 
      } 
      output.flush(); 
      output.close(); 
      input.close(); 

      return id; 
     } catch (Exception e) { 
      return ""; 
     } 

    } 

    @Override 
    protected void onPostExecute(String result) { 
     // TODO Auto-generated method stub 
     super.onPostExecute(result); 
     if (!result.equals("")) 
     { 
      ImageView imageView = imageViewReference.get(); 
      String imagePath = context.getFilesDir().toString() +"/news"+result+".jpg"; 
      imageView.setImageDrawable(Drawable.createFromPath(imagePath)); 
      dataBase db=new dataBase(context); 
      db.setimageStatus(Integer.valueOf(result),1); 
      items.get(position).setimageStatus(1); 
     } 
    } 

} 
} 

답변

0

이것은 목록 높이와 관련된 문제 일 수 있습니다.

목록 높이가 wrap_content가 아닌 fill_parent로 정의되어 있는지 확인하십시오.

또한 Android-Universal-Image-Loader을 확인해야합니다. 안드로이드에서 비동기 로딩, 캐싱 및 이미지 표시를위한 오픈 소스 lib입니다.

+0

감사합니다. fill_parent를 시도했지만 문제가 계속되고 있습니다. 이미지 로더가 로컬 저장소를 저장할 수 있습니까? – kamaka

+0

유니버설 이미지 로더 설명서에서 : 메모리 및/또는 장치의 파일 sysytem (또는 SD 카드)에 이미지 캐싱 가능성 –

관련 문제