I'm learning retrofit following a youtube video but right now I'm stuck. It shows me an error "retrofit expected begin_array but was begin_object at line 1 column 2 path $" I'm trying to get json data from this site. http://servicio-monkydevs.rhcloud.com/clientes/
Here is my code
MainActivity.java
resultadoTextView = (TextView) findViewById(R.id.Resultado);
    Retrofit restAdapter = new Retrofit.Builder()
            .baseUrl("http://servicio-monkydevs.rhcloud.com")
            .addConverterFactory(GsonConverterFactory.create())
            .build();
    ClienteService service = restAdapter.create(ClienteService.class);
    Call<Cliente> call = service.getCliente();
    call.enqueue(new Callback<Cliente>() {
        @Override
        public void onResponse(Call<Cliente> call, Response<Cliente> response) {
            if(response.isSuccessful()) {
                resultadoTextView.setText(call.toString());
            }else{
                resultadoTextView.setText("algo paso");
            }
        }
        @Override
        public void onFailure(Call<Cliente> call, Throwable t) {
            resultadoTextView.setText(t.getMessage());
        }
    });
ClientService.java
public interface ClienteService {
  @GET("/clientes")
  Call<Cliente> getCliente();
}
Client.java
public class Cliente {
private int id;
private String name;
private String username;
private String email;
private String phone;
private String website;
private String photo;
public int getId() {
    return id;
}
public void setId(int id) {
    this.id = id;
}
public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}
public String getUsername() {
    return username;
}
public void setUsername(String username) {
    this.username = username;
}
public String getEmail() {
    return email;
}
public void setEmail(String email) {
    this.email = email;
}
public String getPhone() {
    return phone;
}
public void setPhone(String phone) {
    this.phone = phone;
}
public String getWebsite() {
    return website;
}
public void setWebsite(String website) {
    this.website = website;
}
public String getPhoto() {
    return photo;
}
public void setPhoto(String photo) {
    this.photo = photo;
}
@Override
public String toString() {
    return "Cliente{" +
            "id=" + id +
            ", name='" + name + '\'' +
            ", username='" + username + '\'' +
            ", email='" + email + '\'' +
            ", phone='" + phone + '\'' +
            ", website='" + website + '\'' +
            ", photo='" + photo + '\'' +
            '}';
}}
What am I doing wrong?
UPDATE
I made these changes
public class Cliente {
@SerializedName("id")
private int id;
@SerializedName("name")
private String name;
@SerializedName("username")
private String username;
@SerializedName("email")
private String email;
@SerializedName("phone")
private String phone;
@SerializedName("website")
private String website;
@SerializedName("photo")
private String photo;
...
And this in the interface
public interface ClienteService {
  @GET("/clientes")
  Call<List<Cliente>> getCliente();
}
And this in the MainActivity as you say
 Call<List<Cliente>> call = service.getCliente();
    call.enqueue(new Callback<List<Cliente>>() {
        @Override
        public void onResponse(Call<List<Cliente>> call, Response<List<Cliente>> response) {
            if(response.isSuccessful()) {
                resultadoTextView.setText(call.toString());
            }else{
                resultadoTextView.setText("algo paso");
            }
        }
        @Override
        public void onFailure(Call<List<Cliente>> call, Throwable t) {
            resultadoTextView.setText(t.getMessage());
        }
    });
But now it shows me this error: "retrofit2.executorCallAdapterFactory$ExecutorCallbackCall@6a3dd44"
It shows me this in this line
...
if(response.isSuccessful()) {
            resultadoTextView.setText(call.toString());  <-- HERE
        }else{
...
                As you Can see the Given REST API url returning an array of Object , that is ArrayList but in your retrofit api service the return type is Only Cliente. So change your ClientService.java to the below
public interface ClienteService {
 @GET("/clientes")
 Call<List<Cliente>> getCliente();
}
And change the Call.enque() method to this
Call<List<Cliente>> call = service.getCliente();
    call.enqueue(new Callback<List<Cliente>>() {
        @Override
        public void onResponse(Call<List<Cliente>> call, Response<List<Cliente>>  response) {
            if(response.isSuccessful()) {
               // your code to get data from the list
            }else{
            }
        }
        @Override
        public void onFailure(Call<List<Cliente>> call, Throwable t) {
            resultadoTextView.setText(t.getMessage());
        }
    });
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With