Страница 1 из 1

ListView и JSON

Добавлено: 17 дек 2015, 06:35
shud
Добрый день!
Возникла проблема с формированием ListView из запроса JSON (запрос получен используя volley) - формируется пустой список, или он вообще не формируется, т.е. в main_activity, которая содержит ListView пусто.
Кратко суть, распарсивается по url-ссылке json-файл, используя библиотеку volley. Структура файла следующая:
{"staff":[
{"fio":"Иванов Иван Иванович",
"birthday":"01 января"
"phone":"123456"
},
{"fio":"Сергеев Сергей Сергеевич",
"birthday":"02 февраля"
"phone":"654321"
},...
код проекта можно посмотреть здесь: https://bitbucket.org/dvshulgin/volley_json

Подскажите, плз, почему ListView пустой? Парсинг проходит корректно....

Re: ListView и JSON

Добавлено: 17 дек 2015, 07:04
klblk
я вижу как вы заполняете contactList, но я не вижу как вы делаете notifyDataSetChanged() у адаптера

Re: ListView и JSON

Добавлено: 17 дек 2015, 07:24
shud
klblk писал(а):я вижу как вы заполняете contactList, но я не вижу как вы делаете notifyDataSetChanged() у адаптера
Вы хотите сказать, что после определения адаптера:
ListAdapter adapter = new SimpleAdapter(
MainActivity.this, contactList,
R.layout.list_item, new String[]{TAG_FIO, TAG_BIRTHDAY,
TAG_PHONE}, new int[]{R.id.fio,
R.id.birthday, R.id.phone});

lv.setAdapter(adapter);


не хватает строчки:
adapter.notifyDataSetChanged();

Re: ListView и JSON

Добавлено: 17 дек 2015, 07:34
klblk
нет, я хочу сказать что после того как вы заполняете contactList в onResponse() нужно сделать adapter.notifyDataSetChanged(). Ну и вы видимо не понимаете что запрос выполняется ассинхронно, и то что происходит в onResponse() выполнится уже после того как отработает onCreate().

Re: ListView и JSON

Добавлено: 17 дек 2015, 08:20
shud
klblk, спасибо большое! Действительно, не понимал, а соответственно не учел, что запрос выполняется ассинхронно. Вечером попробую исправить проект и отпишусь. Получается нужно сделать так?
//сначала определяем адаптер
ListAdapter adapter = new SimpleAdapter(
MainActivity.this, contactList,
R.layout.list_item, new String[]{TAG_FIO, TAG_BIRTHDAY,
TAG_PHONE}, new int[]{R.id.fio,
R.id.birthday, R.id.phone});
lv.setAdapter(adapter);

//затем
....
public void onResponse(JSONObject response) {
try {
....
for .....{
.....
contactList.add(contact);
}
adapter.notifyDataSetChanged();

Re: ListView и JSON

Добавлено: 17 дек 2015, 20:03
shud
klblk, добавил в проект вызов метода adapter.notifyDataSetChanged();
AndroidStudio пишет, что cannot resolve method notifyDataSetChanged()

метод notifyDataSetChanged() является унаследованным от класса BaseAdapter, почему не получается его вызвать?

Re: ListView и JSON

Добавлено: 18 дек 2015, 05:32
klblk
у ListAdapter его нет, но он есть у SimpleAdapter, замените: ListAdapter->SimpleAdapter

Re: ListView и JSON

Добавлено: 20 дек 2015, 14:31
shud
klblk, спасибо! всё получилось

Re: ListView и JSON

Добавлено: 23 дек 2015, 07:15
shud
И еще вопрос.

Настраиваю SwipeRefreshLayout, чтобы можно было потянуть за список ListView и обновить его.
Для обновления списка мне нужно в методе onRefresh(), который требуется реализовать из-за имплементации интерфейса SwipeRefreshLayout.OnRefreshListener:

1. снова сделать запрос с помощью JsonObjectRequest;
2. снова вызвать adapter.notifyDataSetChanged()

Правильно я понимаю?

Re: ListView и JSON

Добавлено: 23 дек 2015, 07:26
klblk
Да. Запрос можете сделать отдельным методом, а адаптер полем класса.

Re: ListView и JSON

Добавлено: 08 янв 2016, 12:15
shud
Добрый день!
Решил поместить свой список RecyclerView по нажатию кнопки во фрагмент, который находится на главной активити. При нажатии кнопки - пишет "Приложение остановлено". Помогите, плз, что я не так сделал.

код проекта можно посмотреть здесь: https://bitbucket.org/dvshulgin/recycle ... son_volley