There was a problem with the JSON parser using the JsonReader class (the JSON is attached below, as well as the parser code). It turns out that he reads the first element well, but on the second element I get an exception:

W / System.err: java.lang.IllegalStateException: BEGIN_OBJECT: Expected a name but W / System.err: at android.util.JsonReader.nextName (JsonReader.javaUE90) at ua.com.lacharme.sdk.FloristList. readData (FloristList.java:20) at ua.com.lacharme.sdk.Api.getFloristList (Api.java:136) W / System.err: at ua.com.lacharme.QRScanerActivity $ 1 $ 1 $ 1.run (QRScanerActivity.java : 114) at android.os.AsyncTask $ SerialExecutor $ 1.run (AsyncTask.java:245) at java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1162) at java.util.concurrent.ThreadPoolec. (ThreadPoolExecutor.java:636) at java.lang.Thread.run (Thread.java:764)

Json

{ "0": { "id": 1, "name": "Внештатный флорист", "phones": "000", "is_active": "0", "worker_type_id": "2", "created_at": "2018-06-19 08:04:45", "updated_at": "2018-12-22 14:46:31", "pivot": { "partner_id": "1", "worker_id": "1" } }, "2": { "id": 3, "name": "Александра", "phones": "5445", "is_active": "0", "worker_type_id": "2", "created_at": "2018-09-13 23:50:32", "updated_at": "2018-12-25 14:35:20", "pivot": { "partner_id": "1", "worker_id": "3" } }, "8": { "id": 9, "name": "Ирена", "phones": "+45544", "is_active": "1", "worker_type_id": "2", "created_at": "2018-10-30 11:53:56", "updated_at": "2018-10-30 11:53:56", "pivot": { "partner_id": "1", "worker_id": "9" } }, "9": { "id": 10, "name": "Олеся", "phones": "+45545", "is_active": "0", "worker_type_id": "2", "created_at": "2018-12-07 14:31:13", "updated_at": "2019-01-10 13:55:51", "pivot": { "partner_id": "1", "worker_id": "10" } }, "10": { "id": 11, "name": "Марина", "phones": "+45545", "is_active": "1", "worker_type_id": "2", "created_at": "2018-12-16 18:45:53", "updated_at": "2018-12-16 18:45:53", "pivot": { "partner_id": "1", "worker_id": "11" } }, "11": { "id": 12, "name": "Наталья Бабич", "phones": "55565", "is_active": "1", "worker_type_id": "2", "created_at": "2018-12-20 11:22:35", "updated_at": "2018-12-20 11:22:35", "pivot": { "partner_id": "1", "worker_id": "12" } } } 

Java

 public void readData(JsonReader reader) { floristList = new HashMap<Integer, String>(); try { reader.beginObject(); while (reader.hasNext()) { reader.nextName(); int id = 0; String name = ""; reader.beginObject(); while(reader.hasNext()) { String field = reader.nextName(); switch (field) { case "id" : id = Integer.parseInt(reader.nextString()); break; case "name" : name = reader.nextString(); break; default: reader.skipValue(); break; } } reader.endObject(); floristList.put(id, name); reader.skipValue(); } reader.endObject(); } catch (Exception e) { e.printStackTrace(); } } 

    1 answer 1

    Understood. Here was an extra line in the main loop, because of him he omitted to point to the very end.

    reader.skipValue();