Разбор JSON в listview / arrayadapter

Я делаю приложение, которое анализирует данные JSON в виде списка. У меня это не работает; он не возвращает мне никаких данных.

Это мой код:

public class MainActivity extends AppCompatActivity {

ListView listview;
ArrayAdapter<String> adapter;
String[] data;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    listview = (ListView)findViewById(R.id.listview);

    StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().permitNetwork().build());

    MPWebservice();

    listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            Intent intent = new Intent(MainActivity.this, bestelling.class);
            intent.putExtra("naam", listview.getItemAtPosition(position).toString());
            startActivity(intent);
        }
    });

}


private void MPWebservice() {
    String Webadres = null;
    String dbResult = "empty";
    dbConnect database = new dbConnect(this);

    try {
        String query = "SELECT * FROM orders";
        Webadres = "?query = " + URLEncoder.encode(query, "UTF-8");
        String con = "https://amje.000webhostapp.com/mariosPizzaJSON.php" + Webadres;
        dbResult = database.execute(con).get();
    } catch (Exception e) {
        e.printStackTrace();
    }

    try {
        JSONArray arr = new JSONArray(dbResult);
        JSONObject jo = null;
        data = new String[arr.length()];

        for (int i = 0; i < 1; i++) {
            jo = arr.getJSONObject(i);
            data[i] = jo.getString("name");
        }
        adapter = new ArrayAdapter<String>(this, R.layout.layout_list, R.id.list_item, data);
        listview.setAdapter(adapter);
    } catch (Exception e) {
        e.printStackTrace();
    }
}
  }

Это ошибка в логарифме:

of type org.json.JSONObject cannot be converted to JSONArray

Это json в веб-сервисе:

{
   "orders":[
      {
         "naam":"J. Peeters",
         "adres":"Kettingstraat 12",
         "postcode":"5611 RD",
         "bestelling":[
            {
               "Pizza":"Napolitane"
            },
            {
               "Pizza":"Margarita"
            }
         ]
      },
      {
         "naam":"H. Wissink",
         "adres":"Frederik van Eedenplein 5",
         "postcode":"5611 KT",
         "bestelling":[
            {
               "Pizza":"4-Stagione"
            },
            {
               "Pizza":"Siciliane"
            },
            {
               "Pizza":"4-Stagione"
            }
         ]
      },
      {
         "naam":"M. Huisman",
         "adres":"Hertogstraat 17",
         "postcode":"5611 PB",
         "bestelling":[
            {
               "Pizza":"4-Stagione"
            },
            {
               "Pizza":"Napolitane"
            },
            {
               "Pizza":"4-Stagione"
            },
            {
               "Pizza":"Siciliane"
            },
            {
               "Pizza":"Salami"
            }
         ]
      },
      {
         "naam":"H. Moors",
         "adres":"Mauritsstraat 9",
         "postcode":"5611 GV",
         "bestelling":[
            {
               "Pizza":"Calzone"
            }
         ]
      },
      {
         "naam":"H. Jansen",
         "adres":"Stationsplein 23",
         "postcode":"5611 AC",
         "bestelling":[
            {
               "Pizza":"4-Stagione"
            },
            {
               "Pizza":"4-Stagione"
            }
         ]
      },
      {
         "naam":"G.M. Verkuijlen-vd Ven",
         "adres":"Tramstraat 54",
         "postcode":"5611 CR",
         "bestelling":[
            {
               "Pizza":"Napolitane"
            },
            {
               "Pizza":"Margarita"
            }
         ]
      }
   ]
}

просто используйте google GSON .. google it

param 30.05.2018 12:20

Также попробуйте записать результат вашего запроса. возможно, ваш HTTP-запрос не возвращает json

Abdurakhmon 30.05.2018 12:21

Привет, @Stefan, сначала вам нужно преобразовать свой результат в объект JSON, поскольку это объект json и цикл через массив внутренних заказов

Shanmugam 30.05.2018 12:23

привет @Shanmugam, как я могу сделать это с помощью моего кода?

stefan de boer 30.05.2018 12:25
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
4
82
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы получаете JSONObject из db, а не из массива, массив находится внутри этого объекта. Вы должны сопоставить ответ веб-службы с JSONObject и сопоставить поле bestelling с JSONArray. И ... как было упомянуто в комментарии, используйте некоторую библиотеку, чтобы помочь вам в этом, например GSON.

Не могли бы вы сделать это для меня? Понятия не имею, как это сделать.

stefan de boer 30.05.2018 12:28

Если у вас нет идеи, получите идею. Это просто и, что более важно, теперь вы знаете, что делать. Просить кого-то делать то, что вы знаете, - очень грубо.

Abdurakhmon 30.05.2018 13:10

он мог бы просто сказать «нет, я не хочу», это тоже было бы хорошо. не отвечать тоже грубо. К тому же я очень тороплюсь, поэтому у меня нет времени тратить 2 часа в Google, пытаясь найти ответ.

stefan de boer 30.05.2018 13:15

@stefandeboer: milano прав (хотя я мог бы выразить это более дипломатично). Мы поощряем здесь самостоятельность, а соотношение помощников к людям, нуждающимся в помощи, означает, что мы действительно опасаемся уступать просьбам о бесплатной работе. Можете ли вы использовать полученную новую информацию в качестве отправной точки для новых исследований? Это может быть проще, чем вы думаете.

halfer 30.05.2018 14:03
Ответ принят как подходящий

Проблема здесь JSONArray arr = new JSONArray(dbResult); Меняем его на JSONObject arr = new JSONObject(dbResult); похоже, что вы не опубликовали полные данные json. Если это не решит проблему, опубликуйте полную версию json data.

это не работает. Он выдает ошибку на i в jo = arr.getJSONObject (i) Это сообщение об ошибке: .getJSONObject (java.lang.String) в JSONObject не может быть применен к (int)

stefan de boer 30.05.2018 13:05

Я также обновил полные данные JSON из веб-службы.

stefan de boer 30.05.2018 13:07

JSONObject jsonobject = новый JSONObject (dbResult); JSONArray jsonarray = jsonobject.getJsonArray («заказы»); Чтобы узнать длину jsonarray, используйте; int jsonarrayLength = jsonarray.length (); // Это подсчитает количество объектов в массиве. Здесь вы работаете с неправильным подходом, обращаясь к «имени»; не используйте здесь какой-либо цикл.

sunil kumr 30.05.2018 13:21

Другие вопросы по теме

Есть ли способ проверить тот манифест, который импортировал какое-то разрешение на использование?
Вход в Google показывает ОШИБКУ 10 (журналы - неправильный OAuth), он работает в приложении отладки, но не в выпуске apk
Дифференциация экземпляров виджетов приложения в событиях щелчка в Xamarin Android
Как избежать requestPermission (), если пользователь поставил галочку «Больше не спрашивать»?
Мое приложение работает, когда apk помещается прямо на телефон, но когда он загружен из магазина Google Play, он вылетает
Кордова: некоторые входные файлы используют или переопределяют устаревший API
Как изменить размер маркера в Google Maps API v3 с Android?
Как решить "build / envsetup.sh LUNCH_MENU_CHOICES [@]: unbound variable" при попытке скомпилировать AOSP из источника
Как вы можете поделиться местоположением так же, как WhatsApp в Android, с диалоговым окном выбора?
Студия Android в цикле индексации с настраиваемым правилом lint