改造发送 Json 对象并获取列表作为响应
Retrofit send Json object and get List as response
我发送到我的服务 json 这样的对象
{
"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 界面和其他方法来做到这一点。
我向我的服务发送这样的 json 对象
{
"procedure_name": "testowa",
"parameters": [
{
"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);
}
然后在您的 activity 或 Fragment 中执行此操作以调用:
ArrayList<String> list = new ArrayList<>;
list.add("1");
myRequest myRequest = new myRequest ("testowa", list);
Call<Object> call = service.getData(myRequest );
它会起作用。
其直截了当的“http://jsonschema2pojo.org/”可以帮助您从 Api 响应中生成 POJO。获得生成的 POJO 后,将 Api 接口方法中的 'Object' 类型替换为 POJO class。您还需要将 CallBack 响应类型更改为生成的 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));
然后你必须相应地调整你的改造 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 这样的对象
{
"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 界面和其他方法来做到这一点。
我向我的服务发送这样的 json 对象
{ "procedure_name": "testowa", "parameters": [ { "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);
}
然后在您的 activity 或 Fragment 中执行此操作以调用:
ArrayList<String> list = new ArrayList<>;
list.add("1");
myRequest myRequest = new myRequest ("testowa", list);
Call<Object> call = service.getData(myRequest );
它会起作用。
其直截了当的“http://jsonschema2pojo.org/”可以帮助您从 Api 响应中生成 POJO。获得生成的 POJO 后,将 Api 接口方法中的 'Object' 类型替换为 POJO class。您还需要将 CallBack 响应类型更改为生成的 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));
然后你必须相应地调整你的改造 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());
}
});