Я относительно новичок в модернизации, и у меня возникла проблема с анализом некоторых строковых массивов, которые являются частью ответа JSON.
Это ответ в формате JSON.
{
"positive": [
"Relaxed",
"Uplifted",
"Hungry",
"Sleepy",
"Tingly"
],
"medical": [
"Eye Pressure",
"Insomnia",
"Stress",
"Fatigue",
"Headaches"
]
}
Как мне подойти к этому?
Заранее спасибо :)
List<String> может быть?
Создайте класс POJO, содержащий два списка <String>
class myJsonResponse(){ List<String> positive = new List<String>; List<String> medical = new List<String>; //getters and setters }Мой POJO: общедоступный список <String> getPositive () {положительный результат; }
Мой 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); } });
Вот что говорит мне мой лог-кот: onFailure: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 path $




Вам нужно создать класс 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 () {положительный результат; } `
Основное действие: `@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: /
Ага. @ Shashanth's и ваш ответ сработали. Просто пришлось внести небольшие изменения в мое pojo. Пришлось убедиться, что у меня есть список <String>.
Изучая ваши комментарии, я предполагаю, что ваш класс 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
Создайте POJO класс, затем используйте эту ссылку: stackoverflow.com/questions/42623437/…