java - 改造预期 begin_array 但在第 1 行第 2 列路径 $ 处是 begin_object

标签 java android rest retrofit

我正在观看 YouTube 视频学习改造 但现在我被困住了。它向我显示错误“改造预期 begin_array 但在第 1 行第 2 列路径 $ 处是 begin_object” 我正在尝试从此站点获取 json 数据。 http://servicio-monkydevs.rhcloud.com/clientes/

这是我的代码

主 Activity .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());
        }
    });

客户端服务.java

public interface ClienteService {
  @GET("/clientes")
  Call<Cliente> getCliente();
}

客户端.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 + '\'' +
            '}';
}}

我做错了什么?

更新

我做了这些改变

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

界面中还有这个

public interface ClienteService {
  @GET("/clientes")
  Call<List<Cliente>> getCliente();
}

如您所说,这在 MainActivity 中

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

但现在它向我显示了这个错误: “retrofit2.executorCallAdapterFactory$ExecutorCallbackCall@6a3dd44”

它在这一行中向我展示了这一点

...
if(response.isSuccessful()) {
            resultadoTextView.setText(call.toString());  <-- HERE
        }else{
...

最佳答案

如您所见,给定的 REST API url 返回一个 Object 数组,即 ArrayList,但在您的改造 api 服务中,返回类型为 Only Cliente。 因此,将您的 ClientService.java 更改为以下内容

public interface ClienteService {
 @GET("/clientes")
 Call<List<Cliente>> getCliente();
}

并将 Call.enque() 方法更改为此

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

关于java - 改造预期 begin_array 但在第 1 行第 2 列路径 $ 处是 begin_object,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38066728/

相关文章:

android - 如何从我的应用程序主题中获取原色?

java - IntelliJ- "SnapShooter listening on port XXXXX"?

java - 如何使用 Java 实现二叉树的最低公共(public)祖先?

java - 如何使用内存文件中的vertx创建可下载文件api

rest - 我应该在 RESTful 服务中拥有多个资源 View /端点吗?

api - 具有 Multi-Tenancy 和共享资源的 RESTful API

java - 使用外部服务器reSTLet框架

java - 无法在 Android 上运行应用程序

java - 取消无循环的AsyncTask

android - 每行具有不同列数的 GridLayoutManager