代码之家  ›  专栏  ›  技术社区  ›  Sahil Mughal

应为begin\u数组,但在第1行第2列改装2处为begin\u对象

  •  -1
  • Sahil Mughal  · 技术社区  · 7 年前

    我正在android中使用Reformation 2从服务器接收json格式的数据,并将其用作对象。我正在为服务器端开发netbeans。但它给了我上面提到的以下例外。这是我的客户端(Android)代码

    Retrofit.Builder builder = new Retrofit.Builder()
                .baseUrl("http://192.168.1.6:8080/")
                .addConverterFactory(GsonConverterFactory.create());
    
        Retrofit retrofit = builder.build();
        DriverClient driver = retrofit.create(DriverClient.class);
        Call<List<Driver>> call = driver.getDriverName();
    
        call.enqueue(new Callback<List<Driver>>() {
            @Override
            public void onResponse(Call<List<Driver>> call, Response<List<Driver>> response) {
                List<Driver> list = response.body();
    
                Toast.makeText(MainActivity.this, "Size : " + list.size(), Toast.LENGTH_SHORT).show();
    
                Driver driver = list.get(0);
                String name = driver.getName();
                Toast.makeText(MainActivity.this, "Name : " + name , Toast.LENGTH_SHORT).show();
            }
    
            @Override
            public void onFailure(Call<List<Driver>> call, Throwable t) {
                Toast.makeText(MainActivity.this, "Error : " + t.getMessage(), Toast.LENGTH_SHORT).show();
            }
        });
    

    这是驾驶员等级

    public class Driver {
        @SerializedName("name")
        private String name;
    
        public Driver(String name) {
            this.name = name;
        }
    
        public String getName() {
            return name;
        }
    }
    

    这是DriverClient界面

    public interface DriverClient {
        @GET("/Final/image")
        Call<List<Driver>> getDriverName();
    }
    

    这是简单的服务器端代码

    JSONObject json = new JSONObject();
    json.put("name", "Hafiz Hamza");    
    response.setContentType("text/plain");
    response.setHeader("chache-control", "no cache");  
    PrintWriter out = response.getWriter();
    out.println(json);
    

    如何修复此异常

    2 回复  |  直到 7 年前
        1
  •  0
  •   Navneet Krishna    7 年前

    您将获得 object 从您的端点,因此期望 对象 在您的应用程序端(此处您希望 array 从应用程序端)

    试试这个

    Retrofit.Builder builder = new Retrofit.Builder()
            .baseUrl("http://192.168.1.6:8080/")
            .addConverterFactory(GsonConverterFactory.create());
    
    Retrofit retrofit = builder.build();
    DriverClient driver = retrofit.create(DriverClient.class);
    Call<Driver> call = driver.getDriverName();
    
    call.enqueue(new Callback<Driver>() {
        @Override
        public void onResponse(Call<Driver> call, Response<Driver> response) {
            Driver driver = response.body();
    
            Toast.makeText(MainActivity.this, "Size : " + list.size(), Toast.LENGTH_SHORT).show();
    
            String name = driver.getName();
            Toast.makeText(MainActivity.this, "Name : " + name , Toast.LENGTH_SHORT).show();
        }
    
        @Override
        public void onFailure(Call<Driver> call, Throwable t) {
            Toast.makeText(MainActivity.this, "Error : " + t.getMessage(), Toast.LENGTH_SHORT).show();
        }
    });
    

    以及您的api接口

    public interface DriverClient {
    @GET("/Final/image")
    Call<Driver> getDriverName();
    }
    
        2
  •  0
  •   Rob    7 年前

    这意味着响应结果是一个对象,但您需要调用list。 更改呼叫(>);调用