Tôi có yêu cầu nơi tôi cần tải hình thu nhỏ và Text
trong ListView
được đặt theo tùy chỉnh Adapter
. Các Thumbnail nên được lưu trữ trong bộ nhớ cache, vì tôi đang sử dụng Universal Image Loader tuy nhiên tôi khá bối rối trong việc thực hiện nó và cách sử dụng nó theo yêu cầu của tôi để tải hình ảnh trong ListView
từ URL
. Hãy gợi ý cho tôi một số cách để thực hiện tốt.Cách sử dụng Trình tải ảnh phổ dụng
Trả lời
Viết dưới dòng mã vào getView của adapter của bạn() phương pháp, đây imageUrls [vị trí] là mảng Url hình ảnh và holder.image là imageview.
imageLoader.displayImage(imageUrls[position], holder.image, null);
Và viết dòng mã bên dưới vào trình tạo bộ điều hợp của bạn.
ImageLoader imageLoader=new ImageLoader(activity.getApplicationContext());
nó sẽ giải quyết vấn đề của bạn và nếu bạn có bất kỳ câu hỏi nào liên quan đến điều đó thì hãy cho tôi biết.
Và xem liên kết bên dưới để biết mã nguồn hoàn chỉnh của Ví dụ trình tải hình ảnh phổ quát.
Trong onCreate của adapter của bạn() xác định
ImageLoader imageLoader=new ImageLoader(activity.getApplicationContext());
và sử dụng nó trong getView() phương pháp:
imageLoader.DisplayImage(//your image url, //your imageView);
tôi sẽ đề nghị bạn sử dụng AQuery - (Android-Query) - một siêu khung thao tác UI đơn giản cho Android.
AQuery là thư viện mà bạn cần đưa vào đường dẫn xây dựng của mình.
Trong AQuery, bạn có thể tải, hiển thị (với các hiệu ứng) và bộ nhớ cache hình ảnh (cả trong bộ nhớ và đĩa) với dòng sau:
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 sẽ xử lý tất cả các dữ liệu tải về quy trình, và sẽ hiển thị hình ảnh trên ImageView của bạn mà bạn đã cung cấp. Một khi bạn tải hình ảnh, nó sẽ được lưu trữ trong bộ nhớ (hoặc đĩa) theo các tham số boolean memCache
và fileCache
. Lần sau, nó sẽ tải hình ảnh từ bộ nhớ cache hoặc bộ nhớ cache tập tin.
Để biết thêm thông tin và ví dụ, bạn nên ghé thăm dự án AQuery tại http://code.google.com/p/android-query/
Nhiều mã trên hình ảnh tải - http://code.google.com/p/android-query/wiki/ImageLoading
OK tôi sẽ cố gắng nhưng nó sẽ cung cấp cho bất kỳ loại Out of erros bộ nhớ vì những hình ảnh trên máy chủ với độ phân giải rất cao. –
@NitinBathija Nếu hình ảnh quá lớn, thì sẽ có một số triển khai để giảm kích thước và phân phối nó cho điện thoại. Cung cấp một hình ảnh 15 megapixel đến một màn hình 320x240 px không phải là một ý tưởng tốt - thay vì thay đổi kích thước nó và cung cấp - bạn sẽ tiết kiệm cả hai kế hoạch dữ liệu và không gian đĩa! –
Tôi cũng đã sử dụng truy vấn android trong các dự án trước đây của mình nhưng không thể tìm ra cách sử dụng nó trong trường hợp này http://stackoverflow.com/q/16456812/1503130 – Prateek
Điều này sẽ giúp bạn để tải imageurl sử dụng imageloader phổ quát nó sẽ cho trạng thái cho imageurl được bắt đầu tải, hoàn thành hoặc thất bại và yêu cầu là hủy bỏ tình trạng cũng providing.I hy vọng nó có thể giúp bạn ..
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");
}
});
}
nếu bạn muốn bộ nhớ cache hình ảnh thêm chức năng dưới đây này ... Nhưng để bắt đầu vào tạo ra vì nó rất cao ..
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();
Sau đó, bạn sẽ thêm hàm 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");
}
}
}
}
Xin chào Dipak Tôi đã đi qua như bạn đề nghị và Got những vấn đề này xin vui lòng xem và giúp tôi về câu hỏi được đăng bởi tôi chỉ ..http: //stackoverflow.com/questions/13856815/out-of-memory-error-while- sử dụng-lazylist-in-listview –
cũng như câu hỏi này - http://stackoverflow.com/questions/13855413/out-of-memory-error-using-universal-image-loader-and-images-getting-refreshed –
@ Dipak Keshariya là những bước duy nhất? –