#android #universal-image-loader
#Android #универсальный загрузчик изображений
Вопрос:
Я очень новичок в Universal Image Loader
библиотеке. Я пытаюсь загрузить изображения в listview. Это руководство, на которое я ссылался http://cbpbenitez.blogspot.in/2013/11/universal-image-loader-tutorial.html
. Проблема в том, что изображение не отображается. У меня нет ошибок в моем проекте. Я публикую здесь полный код, пожалуйста, направляйте меня шаг за шагом.
MainActivity.class
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ListView listView = (ListView)findViewById(R.id.listView);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
ImageListAdapter.class
public class ImageListAdapter extends BaseAdapter {
private String[] urls = {
"http://tabletpcssource.com/wp-content/uploads/2011/05/android-logo.png",
"http://simpozia.com/pages/images/stories/windows-icon.png",
"https://si0.twimg.com/profile_images/1135218951/gmail_profile_icon3_normal.png",
"http://www.krify.net/wp-content/uploads/2011/09/Macromedia_Flash_dock_icon.png",
"http://radiotray.sourceforge.net/radio.png",
"http://www.bandwidthblog.com/wp-content/uploads/2011/11/twitter-logo.png",
"http://weloveicons.s3.amazonaws.com/icons/100907_itunes1.png",
"http://weloveicons.s3.amazonaws.com/icons/100929_applications.png",
"http://www.idyllicmusic.com/index_files/get_apple-iphone.png",
"http://www.frenchrevolutionfood.com/wp-content/uploads/2009/04/Twitter-Bird.png",
"http://3.bp.blogspot.com/-ka5MiRGJ_S4/TdD9OoF6bmI/AAAAAAAAE8k/7ydKtptUtSg/s1600/Google_Sky+Maps_Android.png",
"http://www.desiredsoft.com/images/icon_webhosting.png",
"http://goodereader.com/apps/wp-content/uploads/downloads/thumbnails/2012/01/hi-256-0-99dda8c730196ab93c67f0659d5b8489abdeb977.png",
"http://1.bp.blogspot.com/-mlaJ4p_3rBU/TdD9OWxN8II/AAAAAAAAE8U/xyynWwr3_4Q/s1600/antivitus_free.png",
"http://cdn3.iconfinder.com/data/icons/transformers/computer.png",
"http://cdn.geekwire.com/wp-content/uploads/2011/04/firefox.png?7794fe",
"https://ssl.gstatic.com/android/market/com.rovio.angrybirdsseasons/hi-256-9-347dae230614238a639d21508ae492302340b2ba",
"http://androidblaze.com/wp-content/uploads/2011/12/tablet-pc-256x256.jpg",
"http://www.theblaze.com/wp-content/uploads/2011/08/Apple.png",
"http://1.bp.blogspot.com/-y-HQwQ4Kuu0/TdD9_iKIY7I/AAAAAAAAE88/3G4xiclDZD0/s1600/Twitter_Android.png",
"http://3.bp.blogspot.com/-nAf4IMJGpc8/TdD9OGNUHHI/AAAAAAAAE8E/VM9yU_lIgZ4/s1600/Adobe+Reader_Android.png",
"http://cdn.geekwire.com/wp-content/uploads/2011/05/oovoo-android.png?7794fe",
"http://icons.iconarchive.com/icons/kocco/ndroid/128/android-market-2-icon.png",
"http://thecustomizewindows.com/wp-content/uploads/2011/11/Nicest-Android-Live-Wallpapers.png",
"http://c.wrzuta.pl/wm16596/a32f1a47002ab3a949afeb4f",
"http://macprovid.vo.llnwd.net/o43/hub/media/1090/6882/01_headline_Muse.jpg"
};
private Context context;
private ImageLoader imageLoader;
public ImageListAdapter(Context context) {
this.context = context;
imageLoader = ImageLoader.getInstance();
}
@Override
public int getCount() {
return urls.length;
}
@Override
public Object getItem(int arg0) {
return null;
}
@Override
public long getItemId(int arg0) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup viewGroup) {
View v = convertView;
ViewHolder vh = null;
if (v == null) {
v = View.inflate(context, R.layout.list_item, null);
vh = new ViewHolder();
vh.imageView = (ImageView) v.findViewById(R.id.imageView);
v.setTag(vh);
}
else {
vh = (ViewHolder)v.getTag();
}
DisplayImageOptions options = new DisplayImageOptions.Builder()
.cacheOnDisc()
.build();
imageLoader.displayImage(urls[position], vh.imageView, options);
return v;
}
private class ViewHolder {
ImageView imageView;
}
}
UILDemoApplication.class
public class UILDemoApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(getApplicationContext())
.threadPriority(Thread.NORM_PRIORITY - 2)
.denyCacheImageMultipleSizesInMemory()
.discCacheFileNameGenerator(new Md5FileNameGenerator())
.tasksProcessingOrder(QueueProcessingType.LIFO)
.enableLogging()
.build();
ImageLoader.getInstance().init(config);
}
}
Разрешения
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
Комментарии:
1. где вы устанавливаете ImageListAdapter для вашего listview или gridview?
2. Спасибо… Я не установил адаптер. теперь он работает
3. Вы проверяли состояние сети с помощью NetworkInfo? Журнал генерируется с тегом ImageLoader, что в этом журнале говорится об изображениях и ответах? Вы можете инициализировать параметры и вызвать init только один раз в onCreate() действия. Вы инициализируете свои параметры: options = new DisplayImageOptions. Builder().showImageOnLoading(R.drawable.ic_stub). showImageForEmptyUri(R.drawable.ic_empty). showImageOnFail(R.drawable.ic_error).cacheInMemory (true) .cacheOnDisc (true).build();
Ответ №1:
Перед использованием imageloader.displayimage
mathod вы должны сначала инициализировать imageloader.
для инициализации загрузчика изображений попробуйте этот метод
private void configImageLoader() {
// Create global configuration and initialize ImageLoader with this
// configuration
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(
getApplicationContext()).defaultDisplayImageOptions(
getDisplayImageOptions()) // default
.build();
ImageLoader.getInstance().init(config);
}
попробуйте это
public class ImageListAdapter extends BaseAdapter {
private String[] urls = {
"http://tabletpcssource.com/wp-content/uploads/2011/05/android-logo.png",
"http://simpozia.com/pages/images/stories/windows-icon.png",
"https://si0.twimg.com/profile_images/1135218951/gmail_profile_icon3_normal.png",
"http://www.krify.net/wp-content/uploads/2011/09/Macromedia_Flash_dock_icon.png",
"http://radiotray.sourceforge.net/radio.png",
"http://www.bandwidthblog.com/wp-content/uploads/2011/11/twitter-logo.png",
"http://weloveicons.s3.amazonaws.com/icons/100907_itunes1.png",
"http://weloveicons.s3.amazonaws.com/icons/100929_applications.png",
"http://www.idyllicmusic.com/index_files/get_apple-iphone.png",
"http://www.frenchrevolutionfood.com/wp-content/uploads/2009/04/Twitter-Bird.png",
"http://3.bp.blogspot.com/-ka5MiRGJ_S4/TdD9OoF6bmI/AAAAAAAAE8k/7ydKtptUtSg/s1600/Google_Sky+Maps_Android.png",
"http://www.desiredsoft.com/images/icon_webhosting.png",
"http://goodereader.com/apps/wp-content/uploads/downloads/thumbnails/2012/01/hi-256-0-99dda8c730196ab93c67f0659d5b8489abdeb977.png",
"http://1.bp.blogspot.com/-mlaJ4p_3rBU/TdD9OWxN8II/AAAAAAAAE8U/xyynWwr3_4Q/s1600/antivitus_free.png",
"http://cdn3.iconfinder.com/data/icons/transformers/computer.png",
"http://cdn.geekwire.com/wp-content/uploads/2011/04/firefox.png?7794fe",
"https://ssl.gstatic.com/android/market/com.rovio.angrybirdsseasons/hi-256-9-347dae230614238a639d21508ae492302340b2ba",
"http://androidblaze.com/wp-content/uploads/2011/12/tablet-pc-256x256.jpg",
"http://www.theblaze.com/wp-content/uploads/2011/08/Apple.png",
"http://1.bp.blogspot.com/-y-HQwQ4Kuu0/TdD9_iKIY7I/AAAAAAAAE88/3G4xiclDZD0/s1600/Twitter_Android.png",
"http://3.bp.blogspot.com/-nAf4IMJGpc8/TdD9OGNUHHI/AAAAAAAAE8E/VM9yU_lIgZ4/s1600/Adobe+Reader_Android.png",
"http://cdn.geekwire.com/wp-content/uploads/2011/05/oovoo-android.png?7794fe",
"http://icons.iconarchive.com/icons/kocco/ndroid/128/android-market-2-icon.png",
"http://thecustomizewindows.com/wp-content/uploads/2011/11/Nicest-Android-Live-Wallpapers.png",
"http://c.wrzuta.pl/wm16596/a32f1a47002ab3a949afeb4f",
"http://macprovid.vo.llnwd.net/o43/hub/media/1090/6882/01_headline_Muse.jpg"
};
private Context context;
private ImageLoader imageLoader;
public ImageListAdapter(Context context) {
this.context = context;
configImageLoader();
imageLoader = ImageLoader.getInstance();
}
@Override
public int getCount() {
return urls.length;
}
@Override
public Object getItem(int arg0) {
return null;
}
@Override
public long getItemId(int arg0) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup viewGroup) {
View v = convertView;
ViewHolder vh = null;
if (v == null) {
v = View.inflate(context, R.layout.list_item, null);
vh = new ViewHolder();
vh.imageView = (ImageView) v.findViewById(R.id.imageView);
v.setTag(vh);
}
else {
vh = (ViewHolder)v.getTag();
}
imageLoader.displayImage(urls[position], vh.imageView, options);
return v;
}
private void configImageLoader() {
// Create global configuration and initialize ImageLoader with this
// configuration
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(
getApplicationContext()).defaultDisplayImageOptions(
getDisplayImageOptions()) // default
.build();
ImageLoader.getInstance().init(config);
}
private class ViewHolder {
ImageView imageView;
}
}
Комментарии:
1. Что такое функции getDisplayImageOptions ()? Когда я пишу это, у меня появляется ошибка в редакторе с надписью create a method getDisplayImageOptions(). пожалуйста, помогите.
2. теперь попробуйте
public static DisplayImageOptions getDisplayImageOptions() { DisplayImageOptions displayOptions = new DisplayImageOptions.Builder() .cacheInMemory().build(); return displayOptions; }
Ответ №2:
В вашем коде есть две проблемы:
-
Вы создали экземпляр ImageLoader, но не инициализировали ImageLoader. Для этого добавьте эту строку кода в свой конструктор после ImageLoader = ImageLoader.getInstance(); :
ImageLoader.init (ImageLoaderConfiguration.createDefault(ctx));
-
Вы не объявили ни одной опции для вашего ImageLoader. Измените свой код DisplayImageOptions, как показано ниже:
Параметры отображения = новые параметры отображения.Builder() .showImageOnLoading(R.drawable.image_loading) .showImageForEmptyUri (R.drawable.no_image) .showImageOnFail(R.drawable.image_failed) .cacheInMemory (true) .cacheOnDisc (true) .bitmapConfig(Bitmap.Config.RGB_565) .build();