org.json.JSONException: значение типа java.lang.String не может быть преобразовано в JSONArray.

org.json.JSONException: Value NeededTypes of type java.lang.String cannot be converted to JSONArray

я получил эту ошибку, когда я пытаюсь получить JSONArray neededTypesArrayесли у вас есть идеи как это исправить, я буду очень благодарен!

вот мой jsonString:

[  {"NeededTypes":
            [{"DonationTypeId":1},       
             {"DonationTypeId":2}],
        "FirstName":"Катерина",
        "MiddleName":null,
        "LastName":"Дяченко",
        "DateOfBirth":"2002-05-07T00:00:00",
        "DateOfDead":null,
        "DonorCenterId":13,
        "PhotoImage":"http://donorua.blob.core.windows.net/public-images/be359926-22d3-49bd-9ecd-b2c5a41dc988.jpg",
        "ContactPerson":"Наталія (мати)",
        "IsDead":false,
        "IsApproved":true,
        "IsUrgent":true,
        "DateAdded":"2015-03-29T10:51:15.58",
        "BloodGroupId":4,
        "LastEditDate":null,
        "Disease":"description",
        "Id":25,
        "Email":null,
        "Phone":"096 714 99 25",
        "Longitude":0.0,
        "Latitude":0.0},
    ...]

вот мой класс getData:

private void getRecipientsDataFromJson(String dataJson)
            throws JSONException {

        final String RECIP_ID = "Id";
        final String RECIP_CENTER = "DonorCenterId";
        final String RECIP_LASTNAME = "LastName";
        final String RECIP_FIRSTNAME = "FirstName";
        final String RECIP_DATE_OF_BIRTH = "DateOfBirth";
        final String RECIP_BLOOD_GROUP = "BloodGroupId";
        final String RECIP_NEEDED_TYPES = "NeededTypes";
        final String RECIP_DON_TYPE_ID = "DonationTypeId";
        final String RECIP_DISEASE = "Disease";
        final String RECIP_PHOTO_IMAGE = "PhotoImage";
        final String RECIP_CONTACT_PERSON = "ContactPerson";
        final String RECIP_CONTACT_PHONE = "Phone";
        final String RECIP_DESCRIPTION = "Description";

        try {
            JSONArray recipientsArray = new JSONArray(dataJson);
            Vector<ContentValues> cVVector = new Vector<ContentValues>(recipientsArray.length());
            for (int i = 0; i < recipientsArray.length(); i++) {
                int id;
                int center;
                String lastName;
                String firstName;
                String birthDay;
                int bloodGroupId;
                String donationType = "";
                String disease;
                String photoImage;
                String contactPerson;
                String contactPhone;
                String description;

                JSONArray neededTypesArray = new JSONArray(RECIP_NEEDED_TYPES);
                for (int j = 0; j < 3; j++){
                    JSONObject currentDonationType = neededTypesArray.getJSONObject(j);
                    donationType = donationType.concat(currentDonationType.getString(RECIP_DON_TYPE_ID));
                }

                JSONObject currentRecipient = recipientsArray.getJSONObject(i);

                id = currentRecipient.getInt(RECIP_ID);
                center = currentRecipient.getInt(RECIP_CENTER);
                lastName = currentRecipient.getString(RECIP_LASTNAME);
                firstName = currentRecipient.getString(RECIP_FIRSTNAME);
                birthDay = currentRecipient.getString(RECIP_DATE_OF_BIRTH);
                bloodGroupId = currentRecipient.getInt(RECIP_BLOOD_GROUP);
                disease = currentRecipient.getString(RECIP_DISEASE);
                photoImage = currentRecipient.getString(RECIP_PHOTO_IMAGE);
                contactPerson = currentRecipient.getString(RECIP_CONTACT_PERSON);
                contactPhone = currentRecipient.getString(RECIP_CONTACT_PHONE);
                description = currentRecipient.getString(RECIP_DESCRIPTION);

                ContentValues recipientValues = new ContentValues();

                recipientValues.put(RecipientsEntry.COLUMN_RECIPIENT_ID, id);
                recipientValues.put(RecipientsEntry.COLUMN_CENTER_KEY, center);
                recipientValues.put(RecipientsEntry.COLUMN_LAST_NAME, lastName);
                recipientValues.put(RecipientsEntry.COLUMN_FIRST_NAME, firstName);
                recipientValues.put(RecipientsEntry.COLUMN_BIRTH_DAY, birthDay);
                recipientValues.put(RecipientsEntry.COLUMN_BLOOD_GROUP_ID, bloodGroupId);
                recipientValues.put(RecipientsEntry.COLUMN_DONATION_TYPE , donationType );
                recipientValues.put(RecipientsEntry.COLUMN_DISEASE , disease);
                recipientValues.put(RecipientsEntry.COLUMN_PHOTO_IMAGE , photoImage);
                recipientValues.put(RecipientsEntry.COLUMN_CONTACT_PERSON , contactPerson);
                recipientValues.put(RecipientsEntry.COLUMN_CONTACT_PHONE , contactPhone);
                recipientValues.put(RecipientsEntry.COLUMN_DESC , description);

                cVVector.add(recipientValues);
            }
            int inserted = 0;
            if (cVVector.size() > 0){
                ContentValues[] cvArray = new ContentValues[cVVector.size()];
                cVVector.toArray(cvArray);
                inserted = mContext.getContentResolver().bulkInsert(RecipientsEntry.CONTENT_URI, cvArray);
            }
            Log.d(LOG_TAG, "getRecipientsDataFromJson Complete. " + inserted + " Inserted");
        } catch (JSONException e){
            e.printStackTrace();
        }
    }

3 ответа

Решение

Сделать это изменить свой код

JSONObject currentRecipient = recipientsArray.getJSONObject(i);
JSONArray neededTypesArray = currentRecipient.getJSONArray(RECIP_NEEDED_TYPES);
    for (int j = 0; j < neededTypesArray.length(); j++){
        JSONObject currentDonationType = neededTypesArray.getJSONObject(j);
        onationType = donationType.concat(currentDonationType.getString(RECIP_DON_TYPE_ID));
    } 

=========================================================================

КАК Я ИСПРАВИЛ СЛЕДУЮЩИЕ ОШИБКИ:

=========================================================================

org.json.JSONException: значение <br типа java.lang.String не может быть преобразовано в JSONObject

org.json.JSONException: значения разрешений типа java.lang.String не могут быть преобразованы в JSONObject

=========================================================================

Это может не относиться к этому конкретному сценарию, но он появляется в топе результатов поиска по заданной проблеме/ключевому слову.

Итак, я купил скрипт у профессионального продавца на codecanyon.

Сценарий состоял из 3-х основных частей; - САЙТ ОСНОВНОЙ КОРЗИНЫ (PHP) - САЙТ ОСНОВНОГО АДМИНИСТРИРОВАНИЯ + /API (PHP) - ПРИЛОЖЕНИЕ АДМИНИСТРИРОВАНИЯ ДЛЯ ANDROID (JAVA)

После установки скрипта я обнаружил много проблем. Начиная от неполных или отсутствующих массивов таблиц на ГЛАВНОМ САЙТЕ КОРЗИНЫ, затем у меня возникла проблема в ПРИЛОЖЕНИИ ANDROID ADMIN APP, которая (при проверке журналов) показала, что виноват mysqli_exception.

Итак, после нескольких часов возни с петлями и попыток выяснить, в чем проблема. После того, как вы узнаете, как сбрасывать вывод в журналы / logcat. Я смог определить, что это было на самом деле, а;

ГЛАВНОЕ ИЗМЕНЕНИЕ С MYSQL-8

ЧТОБЫ ИСПРАВИТЬ, ВЫПОЛНИТЕ СЛЕДУЮЩИЕ КОМАНДЫ В ТЕРМИНАЛЕ mysql;

УСТАНОВИТЬ ГЛОБАЛЬНЫЙ sql_mode = ''; УСТАНОВИТЬ СЕАНС ​​sql_mode = '';

ЭТО УДАЛЯЕТ 'СТРОГИЙ РЕЖИМ' среди других правил, которые причиняли мне столько горя за последние несколько дней. Подумал, что лучше поделюсь ответом, надеюсь, спасу кого-то еще от мучений, высушивающих глаза =].

Не забудьте повторно ввести набор правил по умолчанию по одному правилу за раз и проверить, какие режимы может поддерживать ваше приложение (если это решение решит вашу проблему), поскольку они, без сомнения, являются важными мерами безопасности/целостности данных, которые существуют по уважительной причине. В идеале обновить кодовую базу, чтобы она соответствовала текущим стандартам. К сожалению, на данном этапе это далеко от меня.

Надеюсь, это сработает для вас, ребята.

Ты должен сделать:

JSONArray neededTypesArray = new JSONObject(dataJson).getJSONArray(RECIP_NEEDED_TYPES);

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