Компьютерапия

    • Офис
      • MS Excel
      • MS Word
      • MS PowerPoint
      • MS Access
    • Веб
      • Joomla
      • WordPress
      • Сайтостроение
      • Уроки HTML
      • Bootstrap 3
      • Web Разработка
      • Web Сервисы и Службы
      • Основы AJAX
      • Изучаем AngularJS
      • Основы CSS
    • Программер
      • Android
      • VBA
      • Основы php
      • JavaScript
      • Основы Arduino
    • Полезные книги
      • Android
      • Assembler
      • Excel
      • linux
      • CSS
      • Delphi
      • Java
      • JavaScript
      • Joomla
      • Web
      • PHP
      • Unity
    • Полезные советы
      • Установки на Virtualbox
      • Продвижение YouTube канала
      • Как заказывать товары на AliExpress
    • Видео уроки
      • Уроки Word
      • Уроки Excel
      • Уроки сайтостроения
      • Уроки Joomla 3
      • Уроки Android
      • Уроки WordPress
      • Полезные советы
      • Уроки PowerPoint
      • Основы Arduino
      • Основы MacOS
      • Основы Vbox
      • Основы Python
    • Блог
    Android
    04 декабря 2020
    11 апреля 2026
    Просмотров: 6212

    Android Studio: получение JSON в ListView и ArrayAdapter. Урок № 2

    Всем привет, и сегодня мы продолжим рассматривать возможности работы с json файлами в Android Studio.

    На этот раз будем использовать listView для отображения данных, хочу напомнить, что в прошлом видео мы работали с recyclerview и cardview, и сегодня будем делать макет попроще, будет иной принцип подключения файла json со списком.

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

    Android Studio получение JSON в ListView и ArrayAdapter. Урок № 2


    Android Studio получение JSON в ListView и ArrayAdapter. Урок № 2


    Android Studio получение JSON в ListView и ArrayAdapter. Урок № 2


    Давайте создадим новый проект с пустой активностью, дадим названием, как вы помните в прошлый раз проект назывался Load Json from assets -01, назовем также с цифрой два, Load Json from assets -02.

    Проект у нас загружен, и давайте создадим папку assets для json файла, создадим новый файл users.json, на этот раз вставим значение, но без имени массива users, сейчас поработаем с безымянном массивом, позже я покажу как работать с этим файлом, сохраним, закроем файл.

    [
      {
        "id": "1",
        "name": "Коля",
        "email": "qwerty@ gmail.com" //пробелы в почте специально!!! при копировании удалить вместе с комментом
      },
      {
        "id": "2",
        "name": "Вася",
        "email": "abc@ gmail.com"
      },
      {
        "id": "3",
        "name": "Федя",
        "email": "def@ gmail.com"
      },
      {
        "id": "4",
        "name": "Юра",
        "email": "xyz@ gmail.com"
      }
    ]

    Откроем activity_main.xml, заменим виджет ConstraintLayout на RelativeLayout, а TextView изменения на ListView. Уберём отсюда всё лишнее и добавим Android:id ListView.

    Список ListView будет для общего плана, а для пунктов списка создадим в папке layout ещё один Resource File, как и в прошлом примере назавем его row.xml. Заменим в разметке RelativeLayout, id не нужен, добавим отступы 6dp.

    Слой listview

    Внутри RelativeLayout добавим LinearLayout, ориентация – вертикальная, внутренний отступ – 5dp.

    Так же добавим два TextView с id, name и email, соответственно, размер текста – 30sp.

    Для RelativeLayout и LinearLayout установим ширину - match_parent, высоту - wrap_content, с разметкой закончили.

    Слой row

    Переходим в MainActivity, объявим переменную типа ListView – listview, обратимся к элементу экрана из кода через findviewbyid

    listView = findViewById(R.id.listView).

    Давайте создадим новый класс которая нас будет отвечать за работу с данными в json файле и списком.

    Назовем его UserAdapter, адаптер будет наследоваться от

    extends ArrayAdapter< JSONObject >

    Нам нужна будет int переменная listLayout, ArrayList< JSONObject > list и как уже говорилось контекст, Context context.

    Далее напишем конструктор

    public UserAdapter(Context context, int listLayout, int field ,ArrayList< JSONObject > list)
    затем

    super(context,listLayout,field,list).

    Напишем присвоение переменных

    this.context=context;
    this.listLayout=listLayout;
    this.list=list;

    Ну теперь нам нужно будет сделать, как мы в прошлый раз делали, получение нашего View, создадим Layout inflator, который будет обращаться к объекту, к нашему файлу разметки row.xml для отображения пунктов списка.

    public View getView(int position, View convertView, ViewGroup parent){
            LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            View itemView = inflater.inflate(listLayout,parent,false);
            TextView name = itemView.findViewById(R.id.name);
            TextView email = itemView.findViewById(R.id.email);
            try {
                name.setText(list.get(position).getString("name"));
                email.setText(list.get(position).getString("email"));
            }catch (JSONException e){
                e.printStackTrace();
            }
            return itemView;
        }
    

    Вот так у нас выглядит наш обработчик, здесь получилось, что мы меньше писали кода в классе UserAdapter чем в прошлом примере.

    Теперь перейдем в mainactivity и продолжим, поскольку у нас массив users.json безымянный, нам проще обратиться к нашему файлу, чем если бы он имел имя.

    Пишем в onCreate

    JSONArray jsonArray = getJSonData("users.json");

    И ниже, вне onCreate напишем функцию getJSonData

    private JSONArray getJSonData(String filename)
    она будет принимать имя файла filename.

    Объявим переменную и проинициализируем ее.

    JSONArray jsonArray = null

    В блоке обработки исключений try/catch получим содержимое файла

    InputStream inputStream = getResources().getAssets().open(filename);

    Узнаем размер

    int size = inputStream.available();

    создадим массив байт

    byte[] data = new byte[size];

    прочитаем его

    inputStream.read(data);

    закроем

    inputStream.close();

    Далее в строковую переменную String json поместим значение переменной data в формате как Вы уже догадались UTF-8

    String json = new String(data,"UTF-8");

    И теперь в переменную jsonArray поместим массив из строковой переменной json.

    jsonArray = new JSONArray(json);

    В обработке исключений IOException переменная e, и e.printStackTrace().

    Еще один блок Catch теперь исключение JSONException js, и js.printStackTrace().

    Наша функция должна вернуть return jsonarray.

    Функция, которая будет обрабатывать наш json файл у нас уже есть. теперь нам нужно будет написать ещё один обработчик работы с ListView для вывода наших данных.

    Давайте ещё напишем приватную функцию

    private ArrayList< JSONObject > getArrayListFromJSONArray(JSONArray jsonArray)

    в качестве параметра буду передавать JSONArray переменная jsonArray

    Создадим

    ArrayList< JSONObject > aList = new ArrayList< JSONObject >();

    Это будет возвращаемая переменная в конце, а пока она будет для накопления данных из ArrayList.

    Снова блок try/catch, в try мы напишем если jsonArray не равно null,

    if(jsonArray!= null)

    то в цикле for

    for(int i = 0; i< jsonArray.length();i++){
    aList.add(jsonArray.getJSONObject(i));
    }

    В наш aList через метод add - добавить, будем наполнять из jsonArray.getJSONObject. Снова блок исключения,

    catch (JSONException js){
                js.printStackTrace();
    

    возвращаемое значение return alist.

    Вот что у нас получилось, с основной частью мы закончили, возвращаемся в это место и вернёмся к нашей функции onCreate.

    Напишем

    ArrayList< JSONObject > listItems = getArrayListFromJSONArray(jsonArray)
    ListAdapter adapter = new UserAdapter(this, R.layout.row,R.id.name,listItems)
    listIView.setAdapter(adapter)

    Так у нас выглядит весь код, сохранимся. Можно попробовать запустить его на выполнение в эмуляторе, он запустился у меня на другом мониторе и вот у нас получились элементы списка с именами Коля, Вася, Федя, Юра и их почтовые адреса.

    JSON список из безымянного массива

    Мы добились того, чего хотели, применили для вывода из json элемент listView вместо recyclerview и cardview.

    В нашем gradle файле ничего как видите не указано из прошлого видео примера.

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

    
    {"users":[
      {
        "id": "1",
        "name": "Коля",
        "email": "qwerty@ gmail.com" //пробелы в почте специально!!! при копировании удалить вместе с комментом
      },
      {
        "id": "2",
        "name": "Вася",
        "email": "abc@ gmail.com" 
      },
      {
        "id": "3",
        "name": "Федя",
        "email": "def@ gmail.com" 
      },
      {
        "id": "4",
        "name": "Юра",
        "email": "xyz@ gmail.com" 
      }
    ]}

    Если запустить приложение в списке ничего нет. Вроде один и тот код, и файл тот же, но ничего не происходит. Давайте теперь перепишем функцию так, чтобы нам возвращалась значение из именного массива.

    Значит это часть у нас пока останется, поскольку здесь у нас возвращается массив, нам нужно будет получить строки.

    Для этого нам нужно будет изменить код следующим образом напишем блок try/catch

    JSONObject jsonObject = new JSONObject(getJSonData("users.json")).

    И обратимся к массиву users внутри json файла

    jsonArray = jsonObject.getJSONArray("users");
    catch (JSONException e){
                e.printStackTrace();

    Закомментируем строку из первого примера, теперь getJSonData у нас должно возвращать строковое значение, давайте вот так если мы захотим вернуться, то нам нужно будет изменить JSONArray на String

    private String getJSonData(String filename){

    jsonArray давайте я тоже закомментирую, продублирую и изменю тип на String

    String json = null;

    и закомментируем здесь

    //jsonArray = new JSONArray(json);

    Удалим блок исключения JSONExeption, и теперь функция возвращает строковое значение.

    Теперь можно запустить по новой и посмотреть, что получится в итоге. Как видите при таком способе у нас из json файла с именем массива users получены данные.

    JSON список из именного массива

    Если мы теперь опять уберём имя массива, то естественно у нас больше ничего работать не будет потому такие нюансы нужно учитывать при работе с json.

    Cкачать архив для ознакомления - Android Studio: получение JSON в ListView и ArrayAdapter. Урок № 2:


    ZIP архив с проектом


    Полный текст activity_main.xml

    
    < ?xml version="1.0" encoding="utf-8"?>
    < RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity">
    
        < ListView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/listView"/>
    
    < /RelativeLayout>
    

    Полный текст row.xml

    
    < ?xml version="1.0" encoding="utf-8"?>
    < RelativeLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="6dp">
    
        < LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:padding="5dp">
            < TextView
                android:id="@+id/name"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="name"
                android:textSize="30sp"/>
    
            < TextView
                android:id="@+id/email"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="name"
                android:textSize="30sp"/>
        < /LinearLayout>
    
    < /RelativeLayout>
    

    Полный текст MainActivity.java

    
    package ru.maxfad.loadjsonfromassets_02;
    
    import android.os.Bundle;
    import android.widget.ListAdapter;
    import android.widget.ListView;
    import androidx.appcompat.app.AppCompatActivity;
    import org.json.JSONArray;
    import org.json.JSONException;
    import org.json.JSONObject;
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.ArrayList;
    
    public class MainActivity extends AppCompatActivity {
        ListView listView;
        JSONArray jsonArray;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            listView = findViewById(R.id.listView);
            try {
                JSONObject jsonObject = new JSONObject(getJSonData("users.json"));
                jsonArray = jsonObject.getJSONArray("users");
            }catch (JSONException e){
                e.printStackTrace();
            }
            ArrayList< JSONObject> listItems = getArrayListFromJSONArray(jsonArray);
            ListAdapter adapter = new UserAdapter(this,R.layout.row,R.id.name,listItems);
            listView.setAdapter(adapter);
        }
    
        //private JSONArray getJSonData(String filename){
        private String getJSonData(String filename){
         //JSONArray jsonArray = null;
         String json = null;
         try {
             InputStream inputStream = getResources().getAssets().open(filename);
             int size = inputStream.available();
             byte[] data = new byte[size];
             inputStream.read(data);
             inputStream.close();
             json = new String(data,"UTF-8");
             //jsonArray = new JSONArray(json);
         }catch (IOException e){
             e.printStackTrace();
         }
            //return jsonArray;
            return json;
        }
        private ArrayList< JSONObject> getArrayListFromJSONArray(JSONArray jsonArray){
            ArrayList< JSONObject> aList = new ArrayList< JSONObject>();
            try {
                if(jsonArray!= null){
                    for(int i = 0; i< jsonArray.length();i++){
                        aList.add(jsonArray.getJSONObject(i));
                    }
                }
            }catch (JSONException js){
                js.printStackTrace();
            }
            return aList;
        }
    }
    

    Полный текст UserAdapter.java

    
    package ru.maxfad.loadjsonfromassets_02;
    
    import android.content.Context;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.ArrayAdapter;
    import android.widget.TextView;
    import org.json.JSONException;
    import org.json.JSONObject;
    import java.util.ArrayList;
    
    public class UserAdapter extends ArrayAdapter< JSONObject> {
        int listLayout;
        ArrayList< JSONObject> list;
        Context context;
    
        public UserAdapter(Context context, int listLayout, int field ,ArrayList< JSONObject> list){
            super(context,listLayout,field,list);
            this.context=context;
            this.listLayout=listLayout;
            this.list=list;
        }
    
        public View getView(int position, View convertView, ViewGroup parent){
            LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            View itemView = inflater.inflate(listLayout,parent,false);
            TextView name = itemView.findViewById(R.id.name);
            TextView email = itemView.findViewById(R.id.email);
            try {
                name.setText(list.get(position).getString("name"));
                email.setText(list.get(position).getString("email"));
            }catch (JSONException e){
                e.printStackTrace();
            }
            return itemView;
        }
    }
    

    Android Studio получение JSON в ListView и ArrayAdapter. Урок № 2


    Рекомендуем смотреть видео в полноэкранном режиме, в настойках качества выбирайте 1080 HD, не забывайте подписываться на канал в YouTube, там Вы найдете много интересного видео, которое выходит достаточно часто. Приятного просмотра!

     С уважением, авторы сайта Компьютерапия

    Понравилось? Поделись этим видео с друзьями!

    Android Studio получение JSON в ListView и ArrayAdapter. Урок № 2


    Рекомендуем смотреть видео в полноэкранном режиме, в настойках качества выбирайте 1080 HD, не забывайте подписываться на видео ВКонтакте, там Вы найдете много интересного, которое выходит достаточно часто. Приятного просмотра!

     С уважением, авторы сайта Компьютерапия

    Понравилось? Поделись этим видео с друзьями!

    Android Studio получение JSON в ListView и ArrayAdapter. Урок № 2


    Рекомендуем смотреть видео в полноэкранном режиме, в настойках качества выбирайте 1080 HD, не забывайте подписываться на канал в Рутубе, там Вы найдете много интересного, которое выходит достаточно часто. Приятного просмотра!

     С уважением, авторы сайта Компьютерапия

    Понравилось? Поделись этим видео с друзьями!

    Tags: json, android
    Подпишитесь на канал в ВК Видео

    Свежие записи 2025

    ВПР на Python, без Excel 16 мая 2026
    Python 3 на Android. Запускаем Ping 28 марта 2026
    Блютуз подключение в Android (проект для Arduino). Часть 2 18 января 2025
    Анимация в PowerPoint - (видео) 09 января 2025
    Меняем имена в GoPro 10 18 июля 2023
    YouTube все - ютубКапут - (видео) 20 марта 2022
    Как сделать презентацию в PowerPoint, презентация с нуля в Рower Point 2016 20 февраля 2022
    Как изменять текст в word с помощью языка Python в среде PyCharm Меняем параграфы таблицы и шрифты - (видео) 09 февраля 2022
    Как преобразовать doc в docx на языке python в PyCharm Массовая конвертация старых файлов в docx - (видео) 09 февраля 2022
    Как установить blender 3.0? Покажу два способа, как установить блендер версии 3.0 на свой комп! - (видео) 05 февраля 2022

    ТОП-10 статей 2025

    • 15 лучших эффектов переходов между слайдами в Power Point
    • Функции даты-времени в VBA. Работа с датой и временем
    • Добавление номеров страниц в колонтитул в Word
    • Массивы в VBA: как работать с массивами
    • Сортировка и фильтрация записей в Access
    • Форматирование и настройка оглавления в Word
    • Методы PHP GET и POST, переменная $_REQUEST
    • Создание форм в Access
    • Установка Android Studio, настройка SDK
    • Работа со строками в VBA: InStr, LCASE, UCase, Left, Right, Mid, LTrim, RTrim, Trim, Len, Replace, Space, StrComp, String, StrReverse
    • Офис
      • MS Excel
      • MS Word
      • MS PowerPoint
      • MS Access
    • Веб
      • Joomla
      • WordPress
      • Сайтостроение
      • Уроки HTML
      • Bootstrap 3
      • Web Разработка
      • Web Сервисы и Службы
      • Основы AJAX
      • Изучаем AngularJS
      • Основы CSS
    • Программер
      • Android
      • VBA
      • Основы php
      • JavaScript
      • Основы Arduino
    • Полезные книги
      • Android
      • Assembler
      • Excel
      • linux
      • CSS
      • Delphi
      • Java
      • JavaScript
      • Joomla
      • Web
      • PHP
      • Unity
    • Полезные советы
      • Установки на Virtualbox
      • Продвижение YouTube канала
      • Как заказывать товары на AliExpress
    • Видео уроки
      • Уроки Word
      • Уроки Excel
      • Уроки сайтостроения
      • Уроки Joomla 3
      • Уроки Android
      • Уроки WordPress
      • Полезные советы
      • Уроки PowerPoint
      • Основы Arduino
      • Основы MacOS
      • Основы Vbox
      • Основы Python
    • Блог

    Категории

    • Уроки Word
    • Уроки Excel
    • Уроки PowerPoint
    • Уроки Access
    • Основы Сайтостройения
    • Уроки HTML
    • Уроки Joomla
    • Уроки WordPress
    • Уроки Bootstrap 3
    • Уроки Android
    • Уроки VBA
    • Основы Arduino

    Разное

    • О сайте
    • Полезные советы
    • Скачать книги
    • Карта сайта
    • Правила сайта

    Видео уроки

    • Уроки Word
    • Уроки Excel
    • Уроки сайтостроения
    • Уроки Joomla 3
    • Уроки Android
    • Уроки WordPress
    • Полезные советы
    • Уроки PowerPoint
    • Основы Arduino

    Подпишитесь в соцсетях

    • Канал на RuTube
    • Группа ВКонтакте
    • Группа в Одноклассниках
    • Канал на YouTube
    © 2019 Компьютерапия - Советы и секреты новичкам в области IT технологий: программирование, сайтостроение, уроки HTML, Word, Excel, Android, Open Server, Joomla, WordPress,PowerPoint, Aliexpress, YouTube, Arduino, видеоуроки.. Все права защищены.
    Перепечатка материалов без согласования допустима при наличии dofollow-ссылки на страницу-источник.