Ошибка дооснащения: ожидаемый BEGIN_ARRAY, но был BEGIN_OBJECT в строке 1, столбце 2, пути $ - PullRequest
0 голосов
/ 11 февраля 2019

Я хочу получить данные по этой ссылке https://api.androidhive.info/contacts/. Используя залп, я могу получить эти данные, но они не работают для списка.таким образом я использую 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 class

 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;
}

}

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

1 Ответ

0 голосов
/ 11 февраля 2019

Вам нужно проанализировать его в JsonObject и получить поле contacts, которое имеет массив!так как теперь он ожидает список объектов 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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...