Ошибка модификацииОжидается BEGIN_ARRAY, но был BEGIN_OBJECT в строке 1, столбце 2, пути $

Я хочу получить данные по этой ссылке https://api.androidhive.info/contacts/. Используя Volley, я могу получить эти данные, но они не работают для списка. таким образом я использую Retrofit, но модификация не работает для нескольких классов.

Api
   public interface Api {
    String BASE_URL = "https://api.androidhive.info";

 @GET("/contacts")
Call<List<Contacts>> getHeroes();
@GET("phone")
Call<List<Phone>> getphone();
}

Jsonparser класс

 public class json_pas extends Fragment{

List<Contacts> herolist;
Retrofit retrofit;
TextView textView;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    return  inflater.inflate(R.layout.json_,null);
}

@Override
public void onViewCreated(@NonNull final View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    textView= view.findViewById(R.id.json_tv);
    herolist = new ArrayList <>();

    retrofit= new Retrofit.Builder().baseUrl(Api.BASE_URL).addConverterFactory(GsonConverterFactory.create()).build();

    Api api = retrofit.create(Api.class);
    Call<List<Contacts>> call= api.getHeroes();
    call.enqueue(new Callback <List <Contacts>>() {
        @Override
        public void onResponse(Call <List <Contacts>> call, retrofit2.Response <List <Contacts>> response) {
            Log.e("pass","1");
            herolist = response.body();


        }

        @Override
        public void onFailure(Call <List <Contacts>> call, Throwable t) {
            Log.e("error","Retrofit error"+t.getMessage());
        }
    });
}

}

модель класса

класс Контакты {

@SerializedName("id")
@Expose
private String id;
@SerializedName("name")
@Expose
private String name;
@SerializedName("email")
@Expose
private String email;
@SerializedName("address")
@Expose
private String address;
@SerializedName("gender")
@Expose
private String gender;
@SerializedName("phone")
@Expose
private Phone phone;

public String getId() {
    return id;
}

public void setId(String id) {
    this.id = id;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getEmail() {
    return email;
}

public void setEmail(String email) {
    this.email = email;
}

public String getAddress() {
    return address;
}

public void setAddress(String address) {
    this.address = address;
}

public String getGender() {
    return gender;
}

public void setGender(String gender) {
    this.gender = gender;
}

public Phone getPhone() {
    return phone;
}

public void setPhone(Phone phone) {
    this.phone = phone;
}

} класс Контакты {

@SerializedName("contacts")
@Expose
private List<Contact> contacts = null;

public List<Contact> getContacts() {
    return contacts;
}

public void setContacts(List<Contact> contacts) {
    this.contacts = contacts;
}

}

класс Телефон {

@SerializedName("mobile")
@Expose
private String mobile;
@SerializedName("home")
@Expose
private String home;
@SerializedName("office")
@Expose
private String office;

public String getMobile() {
    return mobile;
}

public void setMobile(String mobile) {
    this.mobile = mobile;
}

public String getHome() {
    return home;
}

public void setHome(String home) {
    this.home = home;
}

public String getOffice() {
    return office;
}

public void setOffice(String office) {
    this.office = office;
}

}

пожалуйста, помогите мне

Похоже, вы делаете именно то, что указано в ошибке - вы пытаетесь проанализировать массив, когда есть один объект. Возможно, этот объект содержит массив.

fix 11.02.2019 14:43
0
1
42
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам нужно проанализировать его в JsonObject и получить поле contacts, в котором есть массив! так как теперь он ожидает список объекта «Контакты», как указано в сообщении об ошибке

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

public class Contacts {

   @SerializedName("contacts")
   @Expose
   private List<Contact> contacts = null;

   public List<Contact> getContacts() {
      return contacts;
   }

   public void setContacts(List<Contact> contacts) {
      this.contacts = contacts;
   }

}

и в интерфейсе дооснащения

@GET("/contacts")
Call<Contacts> getHeroes();

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