Java 使用改进的Post值
我目前还不熟悉安卓系统。我正在使用此网站进行练习:,我正在尝试使用post请求 这是我正在使用的代码,我使用了Java 使用改进的Post值,java,android,retrofit2,development-environment,Java,Android,Retrofit2,Development Environment,我目前还不熟悉安卓系统。我正在使用此网站进行练习:,我正在尝试使用post请求 这是我正在使用的代码,我使用了jsonschema2pojo,我创建了两个类,这让我很困惑,为什么我们需要两个类?如何使用它们?代码没有崩溃。但是,当我在toast中显示值时,我得到null JsonPlaceholer.java public interface JsonPlaceHolderApi { @FormUrlEncoded @POST("create") Call<Post> create
jsonschema2pojo
,我创建了两个类,这让我很困惑,为什么我们需要两个类?如何使用它们?代码没有崩溃。但是,当我在toast中显示值时,我得到null
JsonPlaceholer.java
public interface JsonPlaceHolderApi {
@FormUrlEncoded
@POST("create")
Call<Post> createPost(@FieldMap Map<String, String> fields);
}
PostR.java
public class PostR {
@SerializedName("status")
@Expose
private String status;
@SerializedName("data")
@Expose
private Post data;
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public Post getData() {
return data;
}
public void setData(Post data) {
this.data = data;
}
}
这两个类用于DTO(数据传输对象),映射来自API和Java对象的响应,以及映射带有Java对象的响应数据 用以下代码替换您的代码,它应该可以工作:
Call Call=jsonPlaceHolderApi.createPost(字段);
call.enqueue(新回调(){
@凌驾
public void onResponse(调用调用,响应响应){
如果(!response.issusccessful()){
textViewResult.setText(“代码:+response.Code());
返回;
}
PostR postRResponse=response.body();
postResponse=postResponse.getData();
if(postResponse!=null){
字符串内容=”;
内容+=“代码:”+response.Code()+“\n”;
content+=“ID:”+postResponse.getId()+“\n”;
内容+=“名称:”+postResponse.getName()+“\n”;
内容+=“薪资:”+postResponse.getSalary()+“\n”;
内容+=“年龄:”+postResponse.getAge()+“\n\n”;
}
//textViewResult2.setText(内容);
Toast.makeText(MainActivity.this,“Ans::”+内容,Toast.LENGTH_LONG.show();
}
@凌驾
public void onFailure(Call,Throwable t){
//textViewResult.setText(t.getMessage());
Toast.makeText(MainActivity.this,“Failed”+t.getMessage(),Toast.LENGTH_LONG.show();
}
p.S-测试API的一般过程:
快看一下,您的PostR.java是您从callback收到的响应的POJO类,Post.java是在
数据中返回的内容的POJO类,因此在main活动中。java
需要将所有Call
替换为Call
,因为PostR.java是包含Post对象的响应。
试试看这是否有帮助
编辑:别忘了用Callback
和Response
替换Callback
和Response
太先检查日志,数据是空的或不确定嵌套的JSON对我来说真的很麻烦我已经发布了数据,但我也在尝试检索完整的数据,所以我没有o也要按照类似的步骤检索?@sagar您标记的答案已接受,即使已编辑的代码中仍有错误。我将提出编辑请求来修复它。您无法映射response.body()直接映射到Post类对象,因为检索的数据映射到PostR.java的对象。因此,必须为PostR映射一个对象,如PostR postRResponse=response.body();
然后为Post创建对象,如Post Post=postRResponse.getData();
。这可能是您仍然无法获取数据的原因。即使在编辑之后,您的代码仍然包含严重错误,请为您修复这些错误。请检查。您应该查看一下。
public class Post {
@SerializedName("name")
@Expose
private String name;
@SerializedName("salary")
@Expose
private String salary;
@SerializedName("age")
@Expose
private String age;
@SerializedName("id")
@Expose
private Integer id;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSalary() {
return salary;
}
public void setSalary(String salary) {
this.salary = salary;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
}
public class PostR {
@SerializedName("status")
@Expose
private String status;
@SerializedName("data")
@Expose
private Post data;
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public Post getData() {
return data;
}
public void setData(Post data) {
this.data = data;
}
}
Call<PostR> call = jsonPlaceHolderApi.createPost(fields);
call.enqueue(new Callback<PostR>() {
@Override
public void onResponse(Call<PostR> call, Response<PostR> response) {
if (!response.isSuccessful()) {
textViewResult.setText("Code: " + response.code());
return;
}
PostR postRResponse = response.body();
Post postResponse = postRResponse.getData();
if(postResponse!=null) {
String content = "";
content += "Code: " + response.code() + "\n";
content += "ID: " + postResponse.getId() + "\n";
content += "Name : " + postResponse.getName() + "\n";
content += "Salary : " + postResponse.getSalary() + "\n";
content += "Age :" + postResponse.getAge() + "\n\n";
}
// textViewResult2.setText(content);
Toast.makeText(MainActivity.this, "Ans::"+content, Toast.LENGTH_LONG).show();
}
@Override
public void onFailure(Call<PostR> call, Throwable t) {
//textViewResult.setText(t.getMessage());
Toast.makeText(MainActivity.this, "Failed "+t.getMessage(), Toast.LENGTH_LONG).show();
}