tag:blogger.com,1999:blog-2406256680519220115.post1989075142359618211..comments2023-06-23T15:34:35.998+03:00Comments on ANgry DROIDs: #5 - Universal Image Loader. Часть 2 - Конфигурация [RU+EN]Sergey Thttp://www.blogger.com/profile/06893695514641733705noreply@blogger.comBlogger99125tag:blogger.com,1999:blog-2406256680519220115.post-17344997371215971202016-06-24T11:47:40.917+03:002016-06-24T11:47:40.917+03:00Добрый день!
Как загрузить картинку (BitMap) по ли...Добрый день!<br />Как загрузить картинку (BitMap) по линку?<br /><br />Я пробовал так:<br />ImageLoader imageLoader = ImageLoader.getInstance();<br />if (!imageLoader.isInited()) {<br />imageLoader.init(ImageLoaderConfiguration.createDefault(context));<br />}<br />BitMap image = imageLoader.loadImageSync("Ссылка на картинку");<br /><br />Но картинку не подгружает (((<br />Anonymoushttps://www.blogger.com/profile/16738450250765119935noreply@blogger.comtag:blogger.com,1999:blog-2406256680519220115.post-5450728252780023072015-11-29T21:25:14.379+03:002015-11-29T21:25:14.379+03:00Приветствую!
imageLoader.init(ImageLoaderConfigura...Приветствую!<br />imageLoader.init(ImageLoaderConfiguration.createDefault(context));<br />context - что это за переменная и для чего она?<br /><br />.discCacheExtraOptions вроде как уже не нужен? Чем он отличается от .diskCacheExtraOptions и почему, когда я пытаюсь сделать .diskCacheExtraOptions(480, 800, CompressFormat.JPEG), он CompressFormat.JPEG подчеркивает красным, а при замене на Bitmap.CompressFormat.JPEG вообще отказывается работать. Как быть?<br /><br />Anonymoushttps://www.blogger.com/profile/08565948368208750794noreply@blogger.comtag:blogger.com,1999:blog-2406256680519220115.post-68159917328088934952015-11-25T12:44:33.768+03:002015-11-25T12:44:33.768+03:00Библиотека работает отовсюду, надо просто передать...Библиотека работает отовсюду, надо просто передать ей ImageView и URL картинки. Ну и опции возможно.<br />Т.е. как-то так - ImageLoader.getInstance().displayImage(imageUrl, viewHolder.imageNews)<br /><br />Глобальную конфигурацию стоит настраивать с Application классе или в первой Activity.<br />Все это можно почитать в Readme и посмотреть в примерном проекте - https://github.com/nostra13/Android-Universal-Image-Loader/tree/master/sample<br /><br /><br />Sergey Thttps://www.blogger.com/profile/06893695514641733705noreply@blogger.comtag:blogger.com,1999:blog-2406256680519220115.post-19860728883254352862015-11-25T00:00:00.235+03:002015-11-25T00:00:00.235+03:00Здравстуйте!
Объясните, пожалуйста начинающему ка...Здравстуйте!<br /><br />Объясните, пожалуйста начинающему как в своем кастомизированном адаптере для списка заполнить у ViewHolder'а поле с изображением? Ведь получается, если я ничего не напутал, что библиотека работает только из активити (так как ей нужен контекст). Где тогда получать инстанс ImageLoader.getInstance() и задавать для него конфиг?<br /><br />метод getView адаптера примерно такой:<br /><br />@Override<br /> public View getView(int position, View convertView, ViewGroup parent) {<br /> if (convertView == null) {<br /> LayoutInflater inflater = (LayoutInflater) getContext()<br /> .getSystemService(Context.LAYOUT_INFLATER_SERVICE);<br /> convertView = inflater.inflate(R.layout.news_row_layout,<br /> parent, false);<br /><br /> ViewHolder viewHolder = new ViewHolder();<br /> <br /> viewHolder.title = (TextView) convertView.findViewById(R.id.news_name);<br /> viewHolder.announce = (TextView) convertView.findViewById(R.id.news_annotation);<br /> viewHolder.date = (TextView) convertView.findViewById(R.id.news_date);<br /> viewHolder.imageNews = (ImageView) convertView.findViewById(R.id.image_of_news);<br /><br /> convertView.setTag(viewHolder);<br /> }<br /> <br /> ViewHolder holder = (ViewHolder) convertView.getTag();<br /><br /> EntryNews news = list.get(position);<br /><br /> holder.title.setText(news.getTitle());<br /> holder.announce.setText(news.getAnnounce());<br /> holder.date.setText(news.getDate());<br /> <br /> // Как здесь при помощи библиотеки загрузить изображение в imageNews ?<br /><br /> return convertView;<br /> }Anonymoushttps://www.blogger.com/profile/03099679583581073180noreply@blogger.comtag:blogger.com,1999:blog-2406256680519220115.post-42410551599822616952015-10-25T23:29:12.734+03:002015-10-25T23:29:12.734+03:00Здравствуй. Помоги плиз.
DisplayImageOptions o...Здравствуй. Помоги плиз.<br /> DisplayImageOptions options = new DisplayImageOptions.Builder()<br /> .showImageForEmptyUri(R.drawable.appicon)<br /> .showImageOnFail(R.drawable.appicon)<br /> .cacheInMemory(true)<br /> .imageScaleType(ImageScaleType.EXACTLY_STRETCHED)<br /> .displayer(new RoundedBitmapDisplayer(20))<br /> .build();<br /><br /> ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(getApplicationContext())<br /> .defaultDisplayImageOptions(options)<br /> .build();<br /><br /> ImageLoader.getInstance().init(config);<br /><br />а вот фрагмент из xml<br /> <br />При таком xml картинка не отображается.<br />Но стоит только сделать например android:layout_height="50dp" картинка сразу отображается, но непропорционального размера, а растягивается на 50 в высоту и на весь экран в ширину. Но я хочу использовать wrap_content, и чтобы картинка отображалась не растянутой, а пропорциональной. Почему так не работаетAnonymoushttps://www.blogger.com/profile/10535816269381886761noreply@blogger.comtag:blogger.com,1999:blog-2406256680519220115.post-76962302722934935942015-09-13T22:56:33.002+03:002015-09-13T22:56:33.002+03:00Привет. Тогда вряд ли чем-то смогу помочь. Возможн...Привет. Тогда вряд ли чем-то смогу помочь. Возможно где-то есть утечки памяти, попрофайли память.Sergey Thttps://www.blogger.com/profile/06893695514641733705noreply@blogger.comtag:blogger.com,1999:blog-2406256680519220115.post-44330630877636402862015-09-11T14:56:09.091+03:002015-09-11T14:56:09.091+03:00Привет. Подскажи пожалуйста. Очень часто выскакива...Привет. Подскажи пожалуйста. Очень часто выскакивает ошибка OutOfMemoryError по твоей инструкции в Github проблему решить не получилось. Anonymoushttps://www.blogger.com/profile/12418067104257742630noreply@blogger.comtag:blogger.com,1999:blog-2406256680519220115.post-12776898352008058832014-12-05T11:53:26.740+03:002014-12-05T11:53:26.740+03:00Отличная, качественная работа!Отличная, качественная работа!Anonymoushttps://www.blogger.com/profile/01803938627003571316noreply@blogger.comtag:blogger.com,1999:blog-2406256680519220115.post-48959826117082138562014-12-03T15:05:26.272+03:002014-12-03T15:05:26.272+03:00Вызов идет з адаптера который наследует ArrayAdapt...Вызов идет з адаптера который наследует ArrayAdapter у функции getView<br />Вот код вызова лоадера: <br /><br /> String photoContact;<br /> try {<br /> photoContact = ContactsController.getPhotoUri(context, rowItem.getContactId()).toString();<br /> ImageLoader.getInstance().displayImage(photoContact, holder.imagePhoto);<br /> } catch (Exception e) {<br /> // TODO Auto-generated catch block<br /> e.printStackTrace();<br /> }<br /><br />И сама функция возврвта URI:<br /><br /> /**<br /> * @return Return the contact photo URI by CONTACT_ID<br /> */<br /> public static Uri getPhotoUri(Context context, int contactId) {<br /> try {<br /> Cursor cur = context.getContentResolver().query(<br /> ContactsContract.Data.CONTENT_URI,<br /> null,<br /> ContactsContract.Data.CONTACT_ID + "=" + contactId + " AND "<br /> + ContactsContract.Data.MIMETYPE + "='"<br /> + ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE + "'", null,<br /> null);<br /> if (cur != null) {<br /> if (!cur.moveToFirst()) {<br /> return null; // no photo<br /> }<br /> } else {<br /> return null; // error in cursor process<br /> }<br /> } catch (Exception e) {<br /> e.printStackTrace();<br /> return null;<br /> }<br /> Uri person = ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, contactId);<br /> return Uri.withAppendedPath(person, ContactsContract.Contacts.Photo.CONTENT_DIRECTORY);<br /> }<br /><br />Использую дефолтовые настройки... з интернета грузит хорошо, а з самого телефона никак ((( Может я сто то не так делаю?Anonymoushttps://www.blogger.com/profile/05546047819638494501noreply@blogger.comtag:blogger.com,1999:blog-2406256680519220115.post-10547733542264469422014-11-30T23:28:40.914+03:002014-11-30T23:28:40.914+03:00Не знаю.Не знаю.Sergey Thttps://www.blogger.com/profile/06893695514641733705noreply@blogger.comtag:blogger.com,1999:blog-2406256680519220115.post-82153257058635092512014-11-30T20:47:31.806+03:002014-11-30T20:47:31.806+03:0011-30 19:46:30.608: E/ImageLoader(22224): URI: con...11-30 19:46:30.608: E/ImageLoader(22224): URI: content://com.android.contacts/contacts/1326/photo/photo, calling user: com.mylauncher, calling package:com.mylauncher<br />11-30 19:46:30.608: E/ImageLoader(22224): java.lang.IllegalArgumentException: URI: content://com.android.contacts/contacts/1326/photo/photo, calling user: com.mylauncher, calling package:com.mylauncher<br />11-30 19:46:30.608: E/ImageLoader(22224): at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:167)<br />11-30 19:46:30.608: E/ImageLoader(22224): at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:137)<br />11-30 19:46:30.608: E/ImageLoader(22224): at android.content.ContentProviderProxy.query(ContentProviderNative.java:366)<br />11-30 19:46:30.608: E/ImageLoader(22224): at android.content.ContentResolver.query(ContentResolver.java:370)<br />11-30 19:46:30.608: E/ImageLoader(22224): at android.content.ContentResolver.query(ContentResolver.java:313)<br />11-30 19:46:30.608: E/ImageLoader(22224): at android.provider.ContactsContract$Contacts.openContactPhotoInputStream(ContactsContract.java:1985)<br />11-30 19:46:30.608: E/ImageLoader(22224): at android.provider.ContactsContract$Contacts.openContactPhotoInputStream(ContactsContract.java:2016)<br />11-30 19:46:30.608: E/ImageLoader(22224): at com.nostra13.universalimageloader.core.download.BaseImageDownloader.getStreamFromContent(BaseImageDownloader.java:187)<br />11-30 19:46:30.608: E/ImageLoader(22224): at com.nostra13.universalimageloader.core.download.BaseImageDownloader.getStream(BaseImageDownloader.java:90)<br />11-30 19:46:30.608: E/ImageLoader(22224): at com.nostra13.universalimageloader.core.LoadAndDisplayImageTask.downloadImage(LoadAndDisplayImageTask.java:290)<br />11-30 19:46:30.608: E/ImageLoader(22224): at com.nostra13.universalimageloader.core.LoadAndDisplayImageTask.tryCacheImageOnDisk(LoadAndDisplayImageTask.java:273)<br />11-30 19:46:30.608: E/ImageLoader(22224): at com.nostra13.universalimageloader.core.LoadAndDisplayImageTask.tryLoadBitmap(LoadAndDisplayImageTask.java:229)<br />11-30 19:46:30.608: E/ImageLoader(22224): at com.nostra13.universalimageloader.core.LoadAndDisplayImageTask.run(LoadAndDisplayImageTask.java:135)<br />11-30 19:46:30.608: E/ImageLoader(22224): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)<br />11-30 19:46:30.608: E/ImageLoader(22224): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)<br />11-30 19:46:30.608: E/ImageLoader(22224): at java.lang.Thread.run(Thread.java:856)<br /><br />В чем ошыбка?Anonymoushttps://www.blogger.com/profile/05546047819638494501noreply@blogger.comtag:blogger.com,1999:blog-2406256680519220115.post-27472271492582714492014-09-15T11:44:17.620+03:002014-09-15T11:44:17.620+03:00Удаляется файлы, которые использовались максимальн...Удаляется файлы, которые использовались максимально давно. Удаляются, пока общий размер кэша не вложится в лимит.Sergey Thttps://www.blogger.com/profile/06893695514641733705noreply@blogger.comtag:blogger.com,1999:blog-2406256680519220115.post-62220931113180557972014-09-15T10:28:19.239+03:002014-09-15T10:28:19.239+03:00Да, это то, что нужно было! Спасибо!
Еще 1 уточня...Да, это то, что нужно было! Спасибо!<br /><br />Еще 1 уточняющий вопрос, какая реакция при достижении установленного размера дискового кэша? То есть он очищается полностью или только его часть?Anonymoushttps://www.blogger.com/profile/01735920262720392256noreply@blogger.comtag:blogger.com,1999:blog-2406256680519220115.post-31690106581010076052014-09-12T10:24:12.639+03:002014-09-12T10:24:12.639+03:00Добрый. Какую имплементацию дискового кэша вы испо...Добрый. Какую имплементацию дискового кэша вы используете? Если дефолтную (UnlimitedDisckCache), то можете унаследоваться от нее, перегрузить метод [File get(String imageUri)] и там исходя из URL возвращаться файл в нужной папке (файл не обязательно должен существовать, этот метод вызывается когда UIL хочет получить объект файла для такого-то URL, и если тот не существует, то этот файл создается).<br />Т.е. метод может выглядет примерно так:<br /><br />@Override<br />public File get(String imageUri) {<br /> String fileName = fileNameGenerator.generate(imageUri);<br /> File dir = cacheDir;<br /><br /> ... // Определяем из URL нужно ли создавать подпапку<br /> dir = new File(dir, "subdir"); // Если да, создаем подпапку<br /> if (!dir.exists()) {<br /> dir.mkdirs();<br /> }<br /><br /> return new File(dir, fileName);<br />}<br /><br />Свой кэш потом надо засетить в конфигурацию.Sergey Thttps://www.blogger.com/profile/06893695514641733705noreply@blogger.comtag:blogger.com,1999:blog-2406256680519220115.post-6291204956369947642014-09-11T23:19:41.667+03:002014-09-11T23:19:41.667+03:00Добрый День, Сергей! Спасибо за библиотеку!
У меня...Добрый День, Сергей! Спасибо за библиотеку!<br />У меня следующая задача, на сайте изображения хранятся по папкам, предполагаемый уровень вложенности не будет превышать 2, то есть есть каталоги по датам, а в них определенные темы. Выкачивая эти изображения хотелось бы повторить структуру каталогов и на устройстве для дальнейшей обработки как даты, так и названия тем в приложении. Подскажите, пожалуйста, наилучший способ этого добиться, если это возможно, а если нет, то можно ли что-то предпринять для решения этой задачи? Заранее спасибо за ответ!Anonymoushttps://www.blogger.com/profile/14335692166000279951noreply@blogger.comtag:blogger.com,1999:blog-2406256680519220115.post-23107737059604488172014-07-30T16:20:26.368+03:002014-07-30T16:20:26.368+03:00Нет такой возможности. Когда в начале мы проверяем...Нет такой возможности. Когда в начале мы проверяем наличие картинки в кэше на диске - у нас есть только URI. По нему мы генерим имя файла и потом ищем этот файл в кэше, чтобы понять, нужно ли загружать картинку из сети. Чтобы генерировать имена исходя их самой картинки - ее по-любому надо загрузить сначала, т.е. смысл дискового кэша теряется. Можете его просто отключить тогда.Sergey Thttps://www.blogger.com/profile/06893695514641733705noreply@blogger.comtag:blogger.com,1999:blog-2406256680519220115.post-36920895499367485012014-07-30T10:00:26.674+03:002014-07-30T10:00:26.674+03:00FileNameGenerator я смотрел с самого началаю Иначе...FileNameGenerator я смотрел с самого началаю Иначе бы не писал, т.к. в качестве параметра используется URI, как мне использовать hash от самой картинки в качестве имени, подскажите, пожалуйста?Anonymoushttps://www.blogger.com/profile/14381124740667926716noreply@blogger.comtag:blogger.com,1999:blog-2406256680519220115.post-16379626646707351022014-07-29T00:08:16.818+03:002014-07-29T00:08:16.818+03:00В том то и дело, что у меня есть URL и Hash, в слу...В том то и дело, что у меня есть URL и Hash, в случае, если Hash поменялся, мне необходимо загрузить новую картинку. Посему я бы хотел переложить эту работу на Ваш Loader, т.е давать ему хеш, который я получаю от сервера и URL, если хеш той картинки, что я получаю от сервера не совпадает с тем что у меня есть, то я по тому же самому URL загружаю новую. Расскажите, пожалуйста, какая есть для этого возможность.Anonymoushttps://www.blogger.com/profile/14381124740667926716noreply@blogger.comtag:blogger.com,1999:blog-2406256680519220115.post-42393265980895741532014-07-28T23:33:57.944+03:002014-07-28T23:33:57.944+03:00Здравствуйте. Есть возможность, но это будет неэфф...Здравствуйте. Есть возможность, но это будет неэффективно, т.к. вы должны будете делать дополнительный запрос. А вообще за имена отвечает FileNameGenerator, который можно передать в конфигурацию..Sergey Thttps://www.blogger.com/profile/06893695514641733705noreply@blogger.comtag:blogger.com,1999:blog-2406256680519220115.post-26781574648640333612014-07-28T22:10:42.708+03:002014-07-28T22:10:42.708+03:00Здравствуйте, Сергей!
Есть ли возможность использо...Здравствуйте, Сергей!<br />Есть ли возможность использовать в качестве имени не MD5 от URL, а MD5 от самой картинки, от ByteArray, скажем.Anonymoushttps://www.blogger.com/profile/14381124740667926716noreply@blogger.comtag:blogger.com,1999:blog-2406256680519220115.post-69084330062214572182014-05-01T18:26:46.314+03:002014-05-01T18:26:46.314+03:00Это не ошибка. Или у вас картинки не отображаются?...Это не ошибка. Или у вас картинки не отображаются?Sergey Thttps://www.blogger.com/profile/06893695514641733705noreply@blogger.comtag:blogger.com,1999:blog-2406256680519220115.post-44356546242107837182014-05-01T17:42:22.185+03:002014-05-01T17:42:22.185+03:00как этого можно избежать? я столкнулся с подобной...как этого можно избежать? я столкнулся с подобной ошибкой..Anonymoushttps://www.blogger.com/profile/12259814023800345626noreply@blogger.comtag:blogger.com,1999:blog-2406256680519220115.post-69804154693007190712014-02-26T19:28:51.718+03:002014-02-26T19:28:51.718+03:00Сергей Здравствуйте , спасибо за библиотеку , я о...Сергей Здравствуйте , спасибо за библиотеку , я отключил кэш .cacheInMemory(false) , .cacheOnDisc(false) в DisplayImageOptions но кэш заполняется в чем проблема ?Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-2406256680519220115.post-44159334972940125562014-02-22T22:54:05.290+03:002014-02-22T22:54:05.290+03:00Исходники менять не нужно.
Я так и не увидел вашей...Исходники менять не нужно.<br />Я так и не увидел вашей конфигурации и кода вызова displayImage().Sergey Thttps://www.blogger.com/profile/06893695514641733705noreply@blogger.comtag:blogger.com,1999:blog-2406256680519220115.post-54420455000272476352014-02-22T22:52:40.393+03:002014-02-22T22:52:40.393+03:00Я точно не уверен , а ImageScaleType.NONE постав...Я точно не уверен , а ImageScaleType.NONE поставлены в правильных местах ?Anonymousnoreply@blogger.com