Intereting Posts
Почему мы используем 10.0.2.2 для подключения к локальному веб-серверу вместо использования IP-адреса компьютера в Android-клиенте TextInputLayout: различный цвет для метки подсказки, когда не сфокусирован Приложение Cordova «hello world» не будет отображаться Как проверить, является ли вид видимым для пользователя Как отточить растровое изображение до сплошного цвета Как определить, требуется ли PIN / пароль / шаблон для разблокировки телефона? Android – java.lang.SecurityException: отказ от разрешения: начало работы Как решить eclipse перспективную ошибку? Android Studio не может создать новый проект, приуроченный к работе в режиме slave aapt Установить ActionBarDrawerToggle в правом углу Почему Eclipse и ADB не распознают мое устройство Android? Google Map API V2. Как сохранить маркер в центре экрана во время прокрутки карты? Динамический широковещательный приемник в фрагменте Фильтр Intent для файлов ConstraintLayout против схемы координатора?

Создание списка из JSON в android

Я совершенно новичок в Android и в настоящее время пытаюсь создать список из массива JSON, который был извлечен с моего сервера, я прочитал много учебников без везения, есть уникальный способ сделать это. Не могли бы вы, пожалуйста, указать некоторые полезные ресурсы для начала.

Я прочитал эту страницу, однако я придерживаюсь следующего кода:

import josecgomez.com.android.dev.webservice.objects.alerts; 

Давая мне "" как не идентифицированный ресурс:

 public class AlertsAdapter extends ArrayAdapter<alerts> 

Спасибо, любая помощь очень ценится!

Solutions Collecting From Web of "Создание списка из JSON в android"

JSON & listview работать следующим образом.

1. просмотр списка предметов

Android SDK обеспечивает удобный способ быстрого отображения списка данных с помощью суперкласса под названием android.app.ListActivity. Эта активность уже предоставляет ContentView, настроенный с помощью ListView , готовый к использованию и заполняемый данными.

В ListView теперь должны быть предоставлены данные для отображения вместе со средствами для сопоставления этих данных в строках. ListAdaptors предоставляют этот механизм и устанавливаются в базовом ListView ListActivity, используя setListAdaptor.

Адаптер Android SDK (ArrayAdaptor) который знает, как обрабатывать массивы произвольных данных в ListViews (Android SDK также поставляется с несколькими другими ListAdaptors , такими как адаптеры курсора, которые могут помочь при подключении локального хранилища данных к ListView). Вам также необходимо предоставить адаптеру макет, который он может использовать для визуализации элементов в каждой строке. В приведенном ниже примере мы используем разработанный Android SDK макет simple_list_item_1, который является единственной текстовой меткой, идеально подходящей для прокладки наших одиночных строк:

 String[] elements = {"Line 1", "Line 2"}; setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, elements)); 

2. Настройка внешнего вида каждого элемента списка

Чтобы достичь этого, вам придется выйти за рамки встроенного макета и ArrayAdaptor и реализовать свои собственные.

Начните с создания класса ABC, который может использоваться для хранения как автора, так и контента в виде строк. Затем создайте и заполните объект некоторыми тестовыми данными, которые будут отображаться в элементе настраиваемого списка:

 public class ABC { String userId; String pwd; } 

Создайте XML-файл макета в файле /res/layout/list_item.xml чтобы определить два TextViews для отображения содержимого и автора в отдельных строках. Чтобы отобразить их один над другим, используйте LinearLayout, настроенный для визуализации каждого элемента внутри него по вертикали (android:orientation="vertical") .

После создания файла XML плагин Android Eclipse автоматически добавит его в качестве ссылки в сгенерированный файл R. Этот файл R хранится в папке / gen вашего проекта и действует как мост между вашими XML-элементами и вашим Java-кодом. Это позволяет вашему Java-коду ссылаться на элементы и файлы XML, созданные в папках / res. Файл, который вы только что создали, теперь можно указать как R.layout.list_item в коде Java, так как вы будете делать дальше в адаптере пользовательского списка.

Создайте закрытый класс (внутри Activity), называемый ListAdaptor который подклассифицирует ArrayAdaptor . Этот класс должен использоваться для хранения отображаемого ArrayList, а также для предоставления возможности сопоставить объекты с TextViews , созданными в вышеприведенном макете.

Это сопоставление переопределяет ListAdaptor и должно возвращать объект View, заполненный содержимым данных в запрошенной позиции.

Полная реализация пользовательского abcListAdaptor приведена ниже:

 private class abcListAdaptor extends ArrayAdapter<abc> { private ArrayList<abc> abc; public abcListAdaptor(Context context, int textViewResourceId, ArrayList<abc> items) { super(context, textViewResourceId, items); this.abc = items; } @Override public View getView(int position, View convertView, ViewGroup parent) { View v = convertView; if (v == null) { LayoutInflater vi = (LayoutInflater) getSystemService (Context.LAYOUT_INFLATER_SERVICE); v = vi.inflate(R.layout.list_item, null); } abc o = abc.get(position); TextView tt = (TextView) v.findViewById(R.id.uid); TextView bt = (TextView) v.findViewById(R.id.pwd); tt.setText(o.userid); bt.setText(o.pwd); return v; } } 

Теперь метод onCreate можно настроить для использования адаптера пользовательского списка с созданными тестовыми данными, как показано ниже:

 public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); abc a = new abc(); a.userid = "tech"; a.pwd = "android"; ArrayList<abc> items = new ArrayList<abc>(); items.add(a); abcListAdaptor adaptor = new abcListAdaptor(this,R.layout.list_item, items); setListAdapter(adaptor); } 

3. Получение удаленных сервисов и анализ данных

Android SDK содержит пакеты, направленные на упрощение доступа к API на основе HTTP. Классы HTTP Apache включены и могут быть найдены в org.apache.http package . Вы будете использовать эти классы вместе с классами org.json для анализа данных, возвращаемых с сервера.

Мы можем создать частный метод в Activity, который делает запрос, анализирует результат и возвращает ArrayList объектов. Код, указанный ниже, делает запрос и ищет полученный JSON array , который итерируется для извлечения каждого текста и элементов from_user.

 ArrayList<abc> getDetail= new ArrayList<abc>(); try { HttpClient hc = new DefaultHttpClient(); HttpGet get = new HttpGet("<a href="http://your URL"></a>"); HttpResponse rp = hc.execute(get); if(rp.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { String result = EntityUtils.toString(rp.getEntity()); JSONObject root = new JSONObject(result); JSONArray sessions = root.getJSONArray("results"); for (int i = 0; i < sessions.length(); i++) { JSONObject session = sessions.getJSONObject(i); abc a = new abc(); a.uid = session.getString("user"); a.pwd = session.getString("password"); getDetail.add(a); } } } catch (Exception e) { Log.e("Activity", "Error loading JSON", e); } 

Теперь замените фиктивные данные, которые вы ранее использовали, с вызовом метода загрузки при построении адаптера пользовательского списка в методе onCreate.

 abcListAdaptor adaptor = new abcListAdaptor(this,R.layout.list_item, load()); 

4.Создание пользовательских интерфейсов

Код в его текущем состоянии может вызвать диалоговое окно Application Not Responseing (ANR), предлагающее пользователю выйти из вашего приложения. Это может произойти из-за продолжительной работы с удаленным запросом на данные, выполняемые в таких методах, как onCreate .

Долгосрочные задачи никогда не должны выполняться в основном потоке приложения (который управляет циклом событий пользовательского интерфейса). Вместо этого они должны быть отправлены в дочерние потоки для выполнения работы.

Хотя для этой задачи может использоваться класс Thread Java, существует сложность в том, что после завершения долговременной задачи обычно требуется изменить пользовательский интерфейс для отчета о результатах (то есть отобразить список загруженных из запроса ).

Элементы пользовательского интерфейса могут изменять свое состояние только из основного потока, поскольку набор инструментов Android UI не является потокобезопасным, поэтому фоновый поток должен возвращать сообщение в основной поток, чтобы манипулировать пользовательским интерфейсом.

К счастью, Android SDK обеспечивает удобный класс AsyncTask, который обеспечивает простой механизм для асинхронных задач для безопасного взаимодействия с потоком пользовательского интерфейса. Это достигается путем подклассификации AsyncTask и переопределения метода doInBackground для выполнения долговременной задачи, а затем переопределения onPostExecute для выполнения любых манипуляций с пользовательским интерфейсом.

Когда AsyncTask создается (он должен быть создан в потоке пользовательского интерфейса) и выполнен, метод doInBackground вызывается в фоновом потоке. По завершении метод onPostExecute возвращается к основному потоку пользовательского интерфейса.

Чтобы использовать это в своем приложении, вам нужно будет реализовать частный класс в Activity (например, пользовательский класс адаптера) под названием MyTask, который подклассифицирует AsyncTask. Вы можете переопределить метод doInBackground с содержимым вашего предыдущего метода загрузки.

Вместо возвращаемого массива ArrayList вы сохраняете переменную экземпляра в Activity, чтобы данные могли делиться между частными классами. Затем в onPostExecute вы можете установить List Adapter с данными, как это было сделано ранее в onCreate. Метод onCreate теперь просто создает объект MyTask и вызывает метод execute.

Лучшие сайты для listView – это и это .

С уважением

TechEnd

Вам необходимо сохранить важные элементы вашего объекта JSON в новый объект, который вы создали сами.

Скажем, ваш объект JSON дает вам ключи с именем, датой и номером телефона, вам нужен объект, который содержит такую ​​информацию.

Ваш список будет принимать массивный атрибут вашего нового типа, каждая ячейка списка будет содержать элементы пользовательского интерфейса (например, текстовые поля), которые заполняются информацией вашего объекта

Это, по крайней мере, трехэтапный процесс, и вам нужно решать решения для каждого из этих шагов индивидуально

Попробуйте этот код в вашей активности сначала проанализировать данные json в массиве String, а затем установить адаптер Listview shoul в xml вашей активности

 try { JSONArray jArray = new JSONArray(result); JSONObject jObj=new JSONObject (); String[] data=new String[jArray.length()] for(int i=0;i<jArray.length();i++) { jObj= jArray.getJSONObject(i); data[i]=json_data.getString("value"); } GameAdapter adapter = new GameAdapter(this, R.layout.listview_item_row, data); listView1 = (ListView)findViewById(R.id.listView1); listView1.setAdapter(adapter); } catch(Exception e) { } 

Я нашел хороший ресурс по этой теме. Теперь у меня есть список с данными Json. Очень рекомендуется всем новичкам. Спасибо, ребята, за помощь.

Я рекомендую вам выполнить следующие действия:

  1. Получать данные из Интернета и хранить их
  2. Передача сохраненных данных на адаптер
  3. Установите адаптер в свой список

На первом этапе я предлагаю вам получить данные с использованием класса AsyncTask , который позволяет выполнять фоновые операции и публиковать результаты в потоке пользовательского интерфейса без необходимости манипулировать потоками и / или обработчиками. Во-вторых, вы должны проанализировать свой контент в соответствии с структурой JSON, которую вы получаете. Наконец, передайте свои данные адаптеру для заполнения списка.