Разбор массива строк с помощью Retrofit2 для Android

Я относительно новичок в модернизации, и у меня возникла проблема с анализом некоторых строковых массивов, которые являются частью ответа JSON.

Это ответ в формате JSON.

{
"positive": [
    "Relaxed",
    "Uplifted",
    "Hungry",
    "Sleepy",
    "Tingly"
],

"medical": [
    "Eye Pressure",
    "Insomnia",
    "Stress",
    "Fatigue",
    "Headaches"
]
}

Как мне подойти к этому?

Заранее спасибо :)

Создайте POJO класс, затем используйте эту ссылку: stackoverflow.com/questions/42623437/…

ʍѳђઽ૯ท 16.10.2018 17:55
List<String> может быть?
Ayush Gupta 16.10.2018 17:55

Создайте класс POJO, содержащий два списка <String>

Aymen Ragoubi 16.10.2018 18:00
class myJsonResponse(){ List<String> positive = new List<String>; List<String> medical = new List<String>; //getters and setters }
Leonardo Velozo 16.10.2018 18:04

Мой POJO: общедоступный список <String> getPositive () {положительный результат; }

Sivan 16.10.2018 18:11

Мой MainActivity.java public void onResponse(Call<List<Strain>> call, Response<List<Strain>> response) { List<Strain> basicDetailsList2 = response.body(); List<String> positiveTraitsArray = basicDetailsList2.get(checknum).getPositive(); Log.d("Positive array", "onResponse: " + positiveTraitsArray); } @Override public void onFailure(Call<List<Strain>> call, Throwable t) { Log.d("Error strainCall2 : ", "onFailure: " + t); } });

Sivan 16.10.2018 18:11

Вот что говорит мне мой лог-кот: onFailure: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 path $

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

Ответы 2

Вам нужно создать класс POJO, как показано ниже

public  class  ExampleResponse  {

private  List < String >  positive  =  null;
private  List < String >  medical  =  null;

public  List < String >  getPositive() {
    return  positive;
}

public  void  setPositive(List < String >  positive) {
    this.positive  =  positive;
}

public  List < String >  getMedical() {
    return  medical;
}

public  void  setMedical(List < String >  medical) {
    this.medical  =  medical;
}

}

Работает отлично.

Пробую это только для положительных результатов. Мой POJO: `private List <String> positive = null; общедоступный список <String> getPositive () {положительный результат; } `

Sivan 16.10.2018 20:33

Основное действие: `@Override public void onResponse (Call <List <Strain>> call, Response <List <Strain>> response) {List <Strain> basicDetailsList2 = response.body (); Список <String> positiveTraitsArray = basicDetailsList2.get (0) .getPositive (); Log.d ("Положительный массив", "onResponse:" + positiveTraitsArray); } Я все еще получаю исключение java.lang.IllegalStateException: ожидалось BEGIN_ARRAY, но было BEGIN_OBJECT в строке 1, столбце 2, путь $ error: /

Sivan 16.10.2018 20:33

Ага. @ Shashanth's и ваш ответ сработали. Просто пришлось внести небольшие изменения в мое pojo. Пришлось убедиться, что у меня есть список <String>.

Sivan 18.10.2018 15:06
Ответ принят как подходящий

Изучая ваши комментарии, я предполагаю, что ваш класс POJO правильный, но то, как вы используете его с вызовом Retrofit, неверно. Убедитесь, что класс POJO, как показано ниже,

import java.util.List;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;

public class Foo {

    @SerializedName("positive")
    @Expose
    private List<String> positive = null;
    @SerializedName("medical")
    @Expose
    private List<String> medical = null;

    public List<String> getPositive() {
        return positive;
    }

    public List<String> getMedical() {
        return medical;
    }

}

И используйте вышеупомянутый класс POJO следующим образом.

Ваш API-интерфейс

import retrofit2.Call;
import retrofit2.http.GET;

public interface FooApiInterface {

    /* pass POJO class to Call<> */

    @GET("request/url")
    Call<Foo> getFoo(/* parameters for the request if there any */);

    /* other api calls here */
}

Далее используйте интерфейс API

FooApiInterface client = ...;  // initialization

Call<Foo> fooCall = client.getFoo();

fooCall.enqueue(
         new Callback<Foo>() {
              @Override
              public void onResponse(@NonNull Call<Foo> call, @NonNull Response<Foo> response) {
                 if (response.isSuccessful()) {
                     List<String> positiveList = response.body().getPositive();
                     List<String> medicalList = response.body().getMedical();
                 }
              }

              @Override
              public void onFailure(@NonNull Call<Foo> call, @NonNull Throwable t) {
                     Log.e("error", "API Error ", t);
              }
    }
);

Обратите внимание, что здесь я использую класс Foo POJO в качестве параметра для Call вместо List<Strain> (как в вашем коде). Если вы измените код, как сказано выше, вы можете избавиться от ошибки

java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 path $ error

В демонстрационных целях я использовал пример Foo. Измените его в соответствии с вашими требованиями.

Прекрасно работает! Большое спасибо: D

Sivan 17.10.2018 07:59

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