Форум программистов, компьютерный форум CyberForum.ru

Список контактов с аватарками - Программирование Android

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Программирование Android Проверка списка отозванных сертификатов Android http://www.cyberforum.ru/android-dev/thread940020.html
Привет! В Android можно каким-либо образом указать, что при использованииSSL/TLS нужно проверять списки отозванных сертификатов (CRL) или всё нужно реализовывать самостоятельно? В JavaSE есть способ указать в SSLContext такую проверку. PKIXBuilderParameters pkixParams = new PKIXBuilderParameters(truststore, new X509CertSelector()); CollectionCertStoreParameters params = new...
Программирование Android ExpandableListView Доброго времени суток! Пытаюсь сделать подсветку элементов ExpandableListView по аналогии с ListView <ExpandableListView android:id="@+id/elvJournOrders" android:layout_width="match_parent" android:layout_height="match_parent" android:choiceMode="singleChoice" android:listSelector="?android:attr/activatedBackgroundIndicator" ... http://www.cyberforum.ru/android-dev/thread939972.html
Программирование Android Взять массив или отдельную строку
"Взятие" данных из базы public String getData() { String columns = new String {KEY_ROWID, KEY_STRANA, KEY_OBLAST}; Cursor c = ourDatabase.query(DATABASE_TABLE, columns, null, null, null, null, null); String result = ""; int iRow = c.getColumnIndex(KEY_ROWID); int iStrana = c.getColumnIndex(KEY_STRANA); int iOblast =...
элемент spinner Программирование Android
Подскажите, пожалуйста, как поставить текст элементов по центру? Код: android:gravity="center" не работает.
Программирование Android LruCache метод put возвращает null http://www.cyberforum.ru/android-dev/thread939782.html
Всем привет! Не могу поянть почему LruCache метод put возвращает null. Может быть кто знает подскажет в чем тут дело? Вот код: public class QwerAdapter extends ArrayAdapter<ListQwers> { private int resource; private LayoutInflater inflater; private Context context; private ListQwers listQwers; private LruCache<String, Bitmap> memoryCache; public QwerAdapter(Context ctx, int...
Программирование Android Позиционирование картинок Мне бы хотелось научиться позиционировать картинки относительно нажатой области экрана подробнее

Показать сообщение отдельно
Grafity
59 / 4 / 1
Регистрация: 31.07.2013
Сообщений: 42

Список контактов с аватарками - Программирование Android

19.08.2013, 12:23. Просмотров 1313. Ответов 2
Метки (Все метки)

Собственно, есть у меня в программе список контактов. Сейчас появилась необходимость выводить аватарки.

За основу вывода картинок в ListView я взял пример, прилагающийся к Universal ImageLoader. Соответственно, его я и использовал. Адаптер сейчас у меня выглядит так:

Кликните здесь для просмотра всего текста

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
    class ContactAdapter extends BaseAdapter{
        
        private class ViewHolder {
            public TextView name;
            public TextView telephone;
            public ImageView image;
        }
 
        @Override
        public int getCount() {
            // TODO Auto-generated method stub
            return userContacts.size();
        }
 
        @Override
        public Object getItem(int position) {
            // TODO Auto-generated method stub
            return userContacts.get(position);
        }
 
        @Override
        public long getItemId(int position) {
            // TODO Auto-generated method stub
            return position;
        }
 
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            
            View view = convertView;
            final Contact p = getContact(position);
            
            listener = new OnTouchListener() {
                 
                @Override
                public boolean onTouch(View v, MotionEvent event) {
 
                    ...
 
            };
            
            final ViewHolder holder;
            
            if (convertView == null) {
                view = getLayoutInflater().inflate(R.layout.item, parent, false);
                holder = new ViewHolder();
                holder.name = (TextView) view.findViewById(R.id.name_tv);
                holder.telephone = (TextView) view.findViewById(R.id.tel_tv);
                holder.image = (ImageView) view.findViewById(R.id.contact_icon);
                view.setTag(holder);
            }
            else{
                holder = (ViewHolder) view.getTag();
            }
            
            if (view != convertView) {
                view.setOnTouchListener(listener);
            }
            
            holder.name.setText(p.name);
            holder.telephone.setText(p.tel);
            
            final Uri uri = getPhotoUri(p.id);
            
            Log.i("log_tag", p.id + " " + p.name + " " + p.tel + " URI = " + uri);
 
            ImageLoader.getInstance().displayImage(uri != null?
                        uri.toString(): null, holder.image, options);
            
            return view;
        }
        
        Contact getContact(int position) {
            return ((Contact) getItem(position));
          }
        
        public Uri getPhotoUri(long contactId) {
            Uri person = ContentUris.withAppendedId(
                    ContactsContract.Contacts.CONTENT_URI, contactId);
            return Uri.withAppendedPath(person,
                    ContactsContract.Contacts.Photo.CONTENT_DIRECTORY);
        }


Инициализация ImageLoader

Кликните здесь для просмотра всего текста

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
options = new DisplayImageOptions.Builder()
        .showStubImage(R.drawable.standart_contact)
        .showImageForEmptyUri(R.drawable.standart_contact)
        .showImageOnFail(R.drawable.standart_contact)
        .cacheInMemory()
        .cacheOnDisc()
        //.displayer(new RoundedBitmapDisplayer(20))
        .build();
        
        ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(getApplicationContext())
        .threadPriority(Thread.NORM_PRIORITY - 2)
        .denyCacheImageMultipleSizesInMemory()
        //.discCacheFileNameGenerator(new Md5FileNameGenerator())
        //.tasksProcessingOrder(QueueProcessingType.LIFO)
        .enableLogging()
        .build();
        
        ImageLoader.getInstance().init(config);


Получается следующее:

На моем телефоне, где около 80 телефонов, выводит аватарку от контакта с id = 1111 на контакт с id=237. Больше ни одной аватарки в списке.

Лог на один из тестовых контактов, созданных у меня на телефоне:

Кликните здесь для просмотра всего текста

08-19 12:04:01.983: I/getView(8572): 1105 Собакен 1235 URI = content://com.android.contacts/contacts/1105/photo
08-19 12:04:01.983: I/ImageLoader(8572): Start display image task [content://com.android.contacts/contacts/1105/photo_480x800]
08-19 12:04:01.983: I/ImageLoader(8572): Load image from network [content://com.android.contacts/contacts/1105/photo_480x800]
08-19 12:04:01.983: I/ImageLoader(8572): Cache image on disc [content://com.android.contacts/contacts/1105/photo_480x800]
08-19 12:04:01.993: E/ImageLoader(8572): content://com.android.contacts/contacts/1105/photo
08-19 12:04:01.993: E/ImageLoader(8572): java.io.FileNotFoundException: content://com.android.contacts/contacts/1105/photo
08-19 12:04:01.993: E/ImageLoader(8572): at android.database.DatabaseUtils.readExceptionWithFileNotFoundExceptionFromParcel(DatabaseUtils.java:149)
08-19 12:04:01.993: E/ImageLoader(8572): at android.content.ContentProviderProxy.openTypedAssetFile(ContentProviderNative.java:617)
08-19 12:04:01.993: E/ImageLoader(8572): at android.content.ContentResolver.openTypedAssetFileDescriptor(ContentResolver.java:717)
08-19 12:04:01.993: E/ImageLoader(8572): at android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:614)
08-19 12:04:01.993: E/ImageLoader(8572): at android.content.ContentResolver.openInputStream(ContentResolver.java:449)
08-19 12:04:01.993: E/ImageLoader(8572): at com.nostra13.universalimageloader.core.download.BaseImageDownloader.getStreamFromContent(BaseImageDownloader.java:164)
08-19 12:04:01.993: E/ImageLoader(8572): at com.nostra13.universalimageloader.core.download.BaseImageDownloader.getStream(BaseImageDownloader.java:88)
08-19 12:04:01.993: E/ImageLoader(8572): at com.nostra13.universalimageloader.core.LoadAndDisplayImageTask.downloadImage(LoadAndDisplayImageTask.java:347)
08-19 12:04:01.993: E/ImageLoader(8572): at com.nostra13.universalimageloader.core.LoadAndDisplayImageTask.tryCacheImageOnDisc(LoadAndDisplayImageTask.java:314)
08-19 12:04:01.993: E/ImageLoader(8572): at com.nostra13.universalimageloader.core.LoadAndDisplayImageTask.tryLoadBitmap(LoadAndDisplayImageTask.java:254)
08-19 12:04:01.993: E/ImageLoader(8572): at com.nostra13.universalimageloader.core.LoadAndDisplayImageTask.run(LoadAndDisplayImageTask.java:134)
08-19 12:04:01.993: E/ImageLoader(8572): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
08-19 12:04:01.993: E/ImageLoader(8572): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
08-19 12:04:01.993: E/ImageLoader(8572): at java.lang.Thread.run(Thread.java:856)
08-19 12:04:02.003: E/ImageLoader(8572): content://com.android.contacts/contacts/1105/photo
08-19 12:04:02.003: E/ImageLoader(8572): java.io.FileNotFoundException: content://com.android.contacts/contacts/1105/photo
08-19 12:04:02.003: E/ImageLoader(8572): at android.database.DatabaseUtils.readExceptionWithFileNotFoundExceptionFromParcel(DatabaseUtils.java:149)
08-19 12:04:02.003: E/ImageLoader(8572): at android.content.ContentProviderProxy.openTypedAssetFile(ContentProviderNative.java:617)
08-19 12:04:02.003: E/ImageLoader(8572): at android.content.ContentResolver.openTypedAssetFileDescriptor(ContentResolver.java:717)
08-19 12:04:02.003: E/ImageLoader(8572): at android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:614)
08-19 12:04:02.003: E/ImageLoader(8572): at android.content.ContentResolver.openInputStream(ContentResolver.java:449)
08-19 12:04:02.003: E/ImageLoader(8572): at com.nostra13.universalimageloader.core.download.BaseImageDownloader.getStreamFromContent(BaseImageDownloader.java:164)
08-19 12:04:02.003: E/ImageLoader(8572): at com.nostra13.universalimageloader.core.download.BaseImageDownloader.getStream(BaseImageDownloader.java:88)
08-19 12:04:02.003: E/ImageLoader(8572): at com.nostra13.universalimageloader.core.decode.BaseImageDecoder.getImageStream(BaseImageDecoder.java:84)
08-19 12:04:02.003: E/ImageLoader(8572): at com.nostra13.universalimageloader.core.decode.BaseImageDecoder.decode(BaseImageDecoder.java:70)
08-19 12:04:02.003: E/ImageLoader(8572): at com.nostra13.universalimageloader.core.LoadAndDisplayImageTask.decodeImage(LoadAndDisplayImageTask.java:297)
08-19 12:04:02.003: E/ImageLoader(8572): at com.nostra13.universalimageloader.core.LoadAndDisplayImageTask.tryLoadBitmap(LoadAndDisplayImageTask.java:256)
08-19 12:04:02.003: E/ImageLoader(8572): at com.nostra13.universalimageloader.core.LoadAndDisplayImageTask.run(LoadAndDisplayImageTask.java:134)
08-19 12:04:02.003: E/ImageLoader(8572): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
08-19 12:04:02.003: E/ImageLoader(8572): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
08-19 12:04:02.003: E/ImageLoader(8572): at java.lang.Thread.run(Thread.java:856)



У этого контакта есть аватарка и она отображается в стандартном контакт листе.

В чем косяк?

З.Ы. По логам выяснил, что после вывода той единственной косячной иконки getView() почему-то начинает заново перебирать элементы списка, которые видны на самой верхней позиции.

Добавлено через 16 минут
Сейчас убрал из параметров ImageLoader все "заглушки" и получился довольно интересный результат:
При первой прокрутке списка, аватарок ни у кого нет - просто пустые ImageView. Когда я долистал до той единственной аватарки, то при пролистывании в любую сторону, как только эта аватарка исчезает за экраном, то у первого появившегося контакта будет эта-же аватарка. Так-же будет и с этой аватаркой. Если много раз пролистать список от начала до конца, то постепенно заполняется весь список этой аватаркой.
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru