2012-12-13 8 views
12

Mam wymagania, w których muszę załadować miniatury i Text w ListView, które zostaną ustawione przez niestandardowe Adapter. Miniatury powinny być przechowywane w pamięci podręcznej, ponieważ używam programu Universal Image Loader, ale jestem w dużym stopniu zagubiony w jego implementacji i używaniu go zgodnie z moim wymaganiem do załadowania obrazów w ListView z URL. Proszę, zasugeruj mi kilka sposobów na dobre wdrożenie.Jak korzystać z Universal Image Loader

Odpowiedz

15

wpisz poniżej linii kodu do adaptera getView metoda(), tutaj imageUrls [stanowisko] jest tablicą adresów URL obrazu i właściciela. image jest widokiem obrazu.

imageLoader.displayImage(imageUrls[position], holder.image, null); 

Wpisz poniżej linię kodu do konstruktora adaptera.

ImageLoader imageLoader=new ImageLoader(activity.getApplicationContext()); 

to rozwiąże twój problem, a jeśli masz jakiekolwiek pytania dotyczące tego, to powiedz mi.

Zobacz poniższy link dla pełnego kodu źródłowego Universal Image Loader Przykład.

Android - Universal Image Loader

+1

Witaj Dipak, które przeszedłem zgodnie z sugestią i masz te problemy, proszę zobacz i pomóż mi w pytaniu wysłanym przeze mnie .. http: //stackoverflow.com/questions/13856815/out-of-memory-error-while- using-lazylist-in-listview –

+0

, a także to pytanie - http://stackoverflow.com/questions/13855413/out-of-memory-error-using-universal-image-loader-and-images-getting-refreshed –

+0

@ Dipak Keshariya są jedynymi krokami? –

8

W onCreate twojego adaptera() zdefiniować

ImageLoader imageLoader=new ImageLoader(activity.getApplicationContext()); 

i używać go w getView() metoda:

imageLoader.DisplayImage(//your image url, //your imageView); 
8

będę sugerować używasz AQuery - (Android-query) - jest Super prosta struktura manipulacyjna interfejsu użytkownika dla systemu Android.

AQuery przychodzi jako biblioteka, którą należy dołączyć do ścieżki budowania.

W AQuery, można pobrać, wyświetlacz (z efektami) i buforować obrazu (zarówno w pamięci i dysku) z następującymi liniami:

AQuery aq = new AQuery(yourActivity.this); 
boolean memCache = true; 
boolean fileCache = true; 
aq.id(R.id.image1).image("http://www.example.com/image.jpg", memCache, fileCache); 

AQuery będzie obsługiwać wszystkie dane pobierając procesów i wyświetli obrazy z Twojego ImageView, które podałeś. Po załadowaniu obrazu zostanie on zbuforowany w pamięci (lub na dysku) zgodnie z parametrami boolowskimi: memCache i fileCache. Następnym razem załaduje obraz z pamięci podręcznej lub pamięci podręcznej plików.

Aby uzyskać więcej informacji i przykładów, należy odwiedzić AQuery projektu w http://code.google.com/p/android-query/

więcej kodu na ładowanie Image - http://code.google.com/p/android-query/wiki/ImageLoading

+0

OK Postaram ale da jakiejkolwiek Out of erros pamięci, ponieważ obrazy na serwerze są bardzo wysokiej rozdzielczości. –

+1

@NitinBathija Jeśli obraz jest zbyt duży, to powinny istnieć pewne implementacje, aby zmniejszyć rozmiar i dostarczyć go do telefonu. Dostarczenie obrazu o rozdzielczości 15 megapikseli do ekranu 320x240 px nie jest dobrym pomysłem - wystarczy zmienić jego wielkość i dostarczyć - zaoszczędzisz zarówno plan danych, jak i przestrzeń dyskową! –

+0

Użyłem również zapytania Android w moich poprzednich projektach, ale nie mogę wymyślić sposobu na wykorzystanie go w tym przypadku http://stackoverflow.com/q/16456812/1503130 – Prateek

1

Pomoże to, aby załadować ImageURL wykorzystaniu uniwersalnej imageLoader da status imageURL się rozpocząć ładowanie, uzupełnione lub nieudanej i prośba jest również anulować stan providing.I nadzieję może pomóc ..

public void ImageLoaderListener(String url){ 

     imageLoader.loadImage(url,new ImageLoadingListener(){ 
      @Override 
      public void onLoadingStarted(String imageUri, View view) { 
       Log.e("tag", "onLoadingStarted"); 
      } 

      @Override 
      public void onLoadingFailed(String imageUri, View view, FailReason failReason) { 
       Log.e("tag", "onLoadingFailed"); 
      } 
      @Override 
      public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) { 
       Log.e("tag", "onLoadingComplete"); 
       imageView.setImageBitmap(loadedImage); 
      } 
      @Override 
      public void onLoadingCancelled(String imageUri, View view) { 
       Log.e("tag", "onLoadingCancelled"); 
      } 
     }); 
    } 

jeśli chcesz dodać obraz w pamięci podręcznej tym poniżej funkcje ... Ale do zainicjowania na tworzenie ponieważ jej bardzo wysoko ..

ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(getApplicationContext()) 
      .defaultDisplayImageOptions(DisplayImageOptions.createSimple()) 
      .build(); 

    imageLoader = imageLoader.getInstance(); 

    if (!imageLoader.isInited()) { 
     imageLoader.init(config); 
    } 
    defaultOptions = new DisplayImageOptions.Builder() 
      .cacheInMemory(true) 
      .cacheOnDisc(true) 
      .build(); 

Następnie dodamy funkcję ImageLoadingListener() ...

public void ImageLoaderListener(String url){ 
    imageLoader.loadImage(url, defaultOptions, new ImageLoadingListener() { 
0
public class CategoryModel 
{ 
     String CatId; 
     String CatName; 
     String Image; 
     String Price; 
     Bitmap ImgSrc; 
     CategoryAdapter Ma; 
     public CategoryModel() 
     { 
     } 
     public CategoryModel(String catid,String catname,String image,String price) 
     { 
      this.CatId = catid; 
      this.CatName = catname; 
      this.Image = image; 
      this.Price = price; 
     } 
     public CategoryModel(String catname,String image,String price) 
     { 
      this.CatName = catname; 
      this.Image = image; 
      this.Price = price; 
     } 
     public void setCatId(String catid) 
     { 
      this.CatId =catid; 
     } 
     public String getCatId() 
     { 
      return this.CatId; 
     } 
     public void setCatName(String catname) 
     { 
      this.CatName=catname; 
     } 
     public String getCatName() 
     { 
      return this.CatName; 
     } 
     public void setImage(String image) 
     { 
      this.Image=image; 
     } 
     public String getImage() 
     { 
      return this.Image; 
     } 
     public void setPrice(String price) 
     { 
      this.Price=price; 
     } 
     public String getPrice() 
     { 
      return this.Price; 
     } 
     public Bitmap getImagesrc() 
     { 
      return this.ImgSrc; 
     } 
     public void setAdapter(CategoryAdapter adf) 
     { 
      this.Ma = adf; 
     } 
     public CategoryAdapter getAdapter() 
     { 
      return this.Ma; 
     } 

     public void LoadImage(CategoryAdapter adap) 
     { 
      this.Ma = adap; 
      if(Image != null && !Image.equals("")) 
      { 
       new ImageLoader().execute(new String[]{ Image }); 
      } 
     } 
     public static Bitmap getBitmapUrl(String src) 
     { 
      try 
      { 
       URL url = new URL(src); 
       HttpURLConnection connection = (HttpURLConnection) url.openConnection(); 
       connection.setDoInput(true); 
       connection.connect(); 
       InputStream input = connection.getInputStream(); 
       Bitmap mybitmap = BitmapFactory.decodeStream(input); 
       connection.disconnect(); 
       return mybitmap; 
      } 
      catch (Exception e) { 
       return null; 
      } 
     } 
     private class ImageLoader extends AsyncTask<String, String, Bitmap> 
     { 
      @Override 
      protected void onPreExecute() 
      { 
      } 
      @Override 
      protected Bitmap doInBackground(String... params) { 
       try 
       { 
        Bitmap b = getBitmapUrl(params[0]); 
        return b; 
       } 
       catch (Exception e) 
       { 
        Log.e("Excep", e.toString()); 
        return null; 
       } 
      } 
      @Override 
      protected void onPostExecute(Bitmap res) 
      { 
       if(res!=null) 
       { 
        ImgSrc = res; 
        if(Ma!=null) 
        { 
         Ma.notifyDataSetChanged(); 
        } 
       } 
       else 
       { 
        Log.e("Error", "Image not Loading"); 
       } 
      } 
     } 
}