Разбор массива строк с использованием Retrofit2 для Android - PullRequest
0 голосов
/ 16 октября 2018

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

Это ответ JSON.

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

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

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

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

Ответы [ 2 ]

0 голосов
/ 17 октября 2018

Просматривая ваши комментарии, я предполагаю, что ваш класс 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: ожидаемый BEGIN_ARRAY, но был BEGIN_OBJECT в строке 1, путь 2, столбец 2 $ error

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

0 голосов
/ 16 октября 2018

Вам нужно создать класс 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;
}

}

Он работает отлично.

...