繁体   English   中英

Retrofit 发送 Json object 并获取列表作为响应

[英]Retrofit send Json object and get List as response

我像这样发送给我的服务 json object

{
  "procedure_name": "testowa",
  "parameters": [
    {
      "Id": "1"
    }

  ]
}

作为回应,我在同一个 url 上获得了 sql 程序的结果集:

[
 {"id": 1, "email": "test", "password": "test"}

]

为此,我编写了这段代码。 这是我的 api 接口:

public interface ApiInterface {
    @POST("/")
    Call<Object> getData(@Body Procedure procedure);
}

这是我的程序 class:

public class Procedure
{
    final String procedure_name;
    final List<HashMap<String, String>> parameters;

    public Procedure(String procedure_name, List<HashMap<String, String>> parameters)
    {
        this.procedure_name = procedure_name;
        this.parameters = parameters;
    }
}

最后 MainActivity 部分我保存响应

ApiInterface service = retrofit.create(ApiInterface.class);

    HashMap<String, String> parameter = new HashMap<>();
    parameter.put("id", "1");

    List<HashMap<String, String>> list_parameters = new ArrayList<>();
    list_parameters.add(parameter);


    Procedure procedure = new Procedure("testowa", list_parameters);
    Call<Object> call = service.getData(procedure);

    call.enqueue(new Callback<Object>() {
        @Override
        public void onResponse(Call<Object> call, Response<Object> response) {
            String apiResponse = new Gson().toJson(response.body());
            textViewResult.append(apiResponse);
        }

        @Override
        public void onFailure(Call<Object> call, Throwable t) {
            textViewResult.setText(t.getMessage());
        }
    });

我将响应保存为字符串,但我想将其保存为对象列表。 我应该再创建一个 class 可能是用户并将响应保存为这个 class 的对象列表。 但我不知道如何更改我的 api 接口和其他方法来做到这一点。

其直截了当的“ http://jsonschema2pojo.org/ ”可以帮助您从 Api 响应生成 POJO。 获得生成的 POJO 后,将 Api 接口方法中的“对象”类型替换为 POJO class。 您还需要将回调响应类型更改为生成的 POJO class

第一步是根据您的 API 响应创建一个 POJO,如下所示:

import com.google.gson.annotations.*;

public class User {

@Expose
private Integer id;
@Expose
private String email;
@Expose
private String password;

public Integer getId() {
return id;
}

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

public String getEmail() {
return email;
}

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

public String getPassword() {
return password;
}

public void setPassword(String password) {
this.password = password;
}

}

然后,如果您还没有完成,您应该将 Gson 构建器传递给您的 Retrofit 实例创建,如下所示:

GsonBuilder gsonBuilder = new GsonBuilder()
Gson gson = gsonBuilder.create();
private static Retrofit.Builder builder =
        new Retrofit.Builder()
                .baseUrl("apiEndpoint/url")
                .addConverterFactory(GsonConverterFactory.create(gson));

然后你必须相应地调整你的 retrofit API 以接收用户列表,就像 JSOn 数组一样:

public interface ApiInterface {
@POST("/")
Call<List<User>> getData(@Body Procedure procedure);
}

最后,retrofit 将以 POJO 形式为您提供响应:

 call.enqueue(new Callback<List<User>>() {
    @Override
    public void onResponse(Call<List<User>> call, Response<List<User>> response) {
        List<User> apiResponse =response.body();
    }

    @Override
    public void onFailure(Call<List<User>> call, Throwable t) {
        textViewResult.setText(t.getMessage());
    }
});

我像这样发送给我的服务 json object

{“程序名称”:“testowa”,“参数”:[{“Id”:“1”}

] }

// 对于这个请求,你需要使用这个 class -

 public class myRequest{
String procedure_name;
ArrayList<myObject> parameters;

        public String getProcedure_name() {
            return procedure_name;
        }

        public void setProcedure_name(String procedure_name) {
            this.procedure_name = procedure_name;
        }

        public ArrayList<myObject> getParameters() {
            return parameters;
        }

        public void setParameters(ArrayList<myObject> parameters) {
            this.parameters = parameters;
        }

        public myRequest() {
        }

        public myRequest(String procedure_name, ArrayList<myObject> parameters) {
            this.procedure_name = procedure_name;
            this.parameters = parameters;
        }

        public class myObject{

            String Id;

            public String getId() {
                return Id;
            }

            public void setId(String id) {
                Id = id;
            }

            public myObject() {
            }

            public myObject(String id) {
                Id = id;
            }
        }
    }

并将其更改为:

public interface ApiInterface {
    @POST("/")
    Call<Object> getData(@Body myRequest myRequest);
}

在您的活动或片段中执行此操作以调用:

ArrayList<String> list = new ArrayList<>;
list.add("1");
 myRequest myRequest = new myRequest ("testowa", list);

 Call<Object> call = service.getData(myRequest );

它会起作用的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM