Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用改进的Post值_Java_Android_Retrofit2_Development Environment - Fatal编程技术网

Java 使用改进的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

我目前还不熟悉安卓系统。我正在使用此网站进行练习:,我正在尝试使用post请求 这是我正在使用的代码,我使用了
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的一般过程:

  • 检查后端(API)是否正常工作或未使用
  • 在日志中打印response.code()和response.body()
  • 检查响应的结构(键/参数)是否与PostR.java相同
  • 检查response.body()的结构(键/参数)是否与Post.java类相同
  • 如果以上所有操作都按预期进行,那么您的Toast应该打印正确的值

  • 快看一下,您的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();
            }