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
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.
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);
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
OK Postaram ale da jakiejkolwiek Out of erros pamięci, ponieważ obrazy na serwerze są bardzo wysokiej rozdzielczości. –
@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ą! –
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
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() {
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");
}
}
}
}
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 –
, a także to pytanie - http://stackoverflow.com/questions/13855413/out-of-memory-error-using-universal-image-loader-and-images-getting-refreshed –
@ Dipak Keshariya są jedynymi krokami? –