Веб-сервис с JSON

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

это мой код: открытый класс MainActivity расширяет AppCompatActivity {

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

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

    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 adres";
        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 ja = new JSONArray(dbResult);
        JSONObject jo = null;
        data = new String[ja.length()];
        for (int i = 0; i < ja.length(); i++){
            jo = ja.getJSONObject(i);
            data[i] = jo.getString("Naam");

        }
        adapter = new ArrayAdapter<String>(this, R.layout.layout_list, R.id.list_item, data);
        listview.setAdapter(adapter);
    }
    catch (Exception e){
        e.printStackTrace();
    }
}

}

Это данные JSON из веб-службы:

orders: [
{
naam: "J. Hecker",
adres: "St Rochusstraat 40",
postcode: "5611 RJ",
bestelling: [
          {
            Pizza: "Siciliane"
          },
          {
            Pizza: "4-Stagione"
          },
          {
            Pizza: "Hawaii"
          },
          {
            Pizza: "Siciliane"
          }
        ]
},

Вот Logcat:

05-30 11:22:26.415 11361-11361/com.example.stefan.mad_oefenexamen W/System.err: org.json.JSONException: Value {"orders":[{"naam":"P. Melissen","adres":"Grote Berg 101","postcode":"5611 KJ","bestelling":[{"Pizza":"Hawaii"},{"Pizza":"Siciliane"},{"Pizza":"Napolitane"},{"Pizza":"Margarita"},{"Pizza":"Margarita"}]},{"naam":"M.  Dijk","adres":"Jan Smitzlaan 2","postcode":"5611 LE","bestelling":[{"Pizza":"Margarita"}]},{"naam":"Th.M. Neessen","adres":"Hoefkestraat 31","postcode":"5611 RM","bestelling":[{"Pizza":"Napolitane"}]},{"naam":"T. Bazelmans","adres":"Hertog Hendrik van Brabantplein 29","postcode":"5611 PG","bestelling":[{"Pizza":"4-Stagione"},{"Pizza":"Hawaii"},{"Pizza":"Siciliane"},{"Pizza":"Margarita"},{"Pizza":"Salami"},{"Pizza":"4-Stagione"}]},{"naam":"L. Cals","adres":"Geldropseweg 5","postcode":"5611 SB","bestelling":[{"Pizza":"Margarita"},{"Pizza":"Napolitane"}]}]} of type org.json.JSONObject cannot be converted to JSONArray

следуйте этому руководству androidhive.info/2012/01/android-json-parsing-tutorial

Vishva Dave 30.05.2018 10:26

Помните, что в вашем файле манифеста вы должны указать права доступа в Интернет <uses-permission android:name = "android.permission.INTERNET" />

Mimmetico 30.05.2018 10:28

@Mimmetico Я сделал это, но он все еще не дает данных.

acesteef 30.05.2018 10:28

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

Vladyslav Matviienko 30.05.2018 10:44

@VladyslavMatviienko еще ничего :(

acesteef 30.05.2018 10:49

Я не вижу изменений в коде.

Vladyslav Matviienko 30.05.2018 10:50

@VladyslavMatviienko я добавил код в блок catch.

acesteef 30.05.2018 10:54

Эммм ... попробуйте применить ListView: listview = (ListView)findViewById(R.id.listview);

Mimmetico 30.05.2018 11:05

@Mimmetico im на 100% уверен, что это не проблема кода, поскольку я использовал тот же код в другом проекте, и это сработало. это проблема веб-сервиса. может быть, имя таблицы в базе данных и имя массива в json отличаются?

acesteef 30.05.2018 11:16

Значит, после добавления этого e.printStackTrace() в logcat нет никаких трассировок стека?

Vladyslav Matviienko 30.05.2018 11:19

Это возможно. В вашем Json вы написали «naam», а в своем коде вы написали «Naam». Для андроида все по-другому. Попробуй измениться.

Mimmetico 30.05.2018 11:20

@VladyslavMatviienko Я обнаружил полезную ошибку в logcat. Я добавил строку выше. Он говорит, что он не может быть преобразован в массив. может в этом проблема?

acesteef 30.05.2018 11:27

да, это проблема. Ваш ответ от сервера - это JSONObject, а не JSONArray.

Vladyslav Matviienko 30.05.2018 11:38

@VladyslavMatviienko Как исправить эту проблему?

acesteef 30.05.2018 11:38

Хорошим началом было бы найти руководство о том, как разбирать JSON

Vladyslav Matviienko 30.05.2018 11:44

@VladyslavMatviienko Я это сделал. но в моем случае это не работает. Не могли бы вы мне помочь?

acesteef 30.05.2018 11:52

Вы пробовали изменить эту строку: data[i] = jo.getString("Naam"); на эту: data[i] = jo.getString("naam");?

Mimmetico 30.05.2018 12:49

Тот же вопрос задан как этот; я ответил здесь. stackoverflow.com/questions/50602165/…

sunil kumr 30.05.2018 13:57
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
18
38
1

Ответы 1

Проблема в том, что ответ сервера - это JSONObject, а не JSONArray. И этот JSONObject содержит JSONArray следующего

{
naam: "J. Hecker",
adres: "St Rochusstraat 40",
postcode: "5611 RJ",
bestelling: [
      {
        Pizza: "Siciliane"
      },
      {
        Pizza: "4-Stagione"
      },
      {
        Pizza: "Hawaii"
      },
      {
        Pizza: "Siciliane"
      }
    ]
    },

Чтобы получить эти значения, сделайте это, если ваш ответ JSONObject - jsonResponseObject

try{
 JSONArray jsonArray=jsonResponseObject.getJSONArray("orders");
 for(int i=0;i<jsonArray.length(),i++){
 JSONObject jsonObject=jsonArray.getJSONObject(i);
 Log.d("Naam",jsonObject.getString("naam"));
 }catch(Exception e){
    e.printstacktrace();
 }

}

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