尝试处理通过 POST 方法接收的 JSON 数组 (Retrofit2)

Posted

技术标签:

【中文标题】尝试处理通过 POST 方法接收的 JSON 数组 (Retrofit2)【英文标题】:Trying to process a JSON array that is received through POST method (Retrofit2) 【发布时间】:2020-02-29 07:39:07 【问题描述】:

我在尝试解析通过 POST 方法检索到的 JSON 数组时遇到了困难。我对此非常陌生,请原谅我的任何无知。

RequestInterface.java

public interface RequestInterface 

    @POST("index.php/")
    Call<Classes> queryclass(@Body ServerRequest request);


类.java

public class Classes 

    @SerializedName("classname")
    private String classname;
    @SerializedName("subject")
    private String subject;
    @SerializedName("classday")
    private String classday;
    @SerializedName("timestart")
    private String timestart;
    @SerializedName("timeend")
    private String timeend;

    public Classes(String classname, String subject, String classday, String timestart, String timeend)

        this.classname = classname;
        this.subject = subject;
        this.classday = classday;
        this.timestart = timestart;
        this.timeend = timeend;

    

    public String getClassname() 
        return classname;
    

ServerRequest.java

public class ServerRequest 

private String queryclass;
private User user;

public void setQueryClass(String queryclass)  this.queryclass = queryclass; 

public void setUser(User user) 
    this.user = user;



活动(改造)

User user = new User();
user.setEmail(email);
ServerRequest request = new ServerRequest();
request.setQueryClass(Constants.QUERYCLASSES_OPERATION);
request.setUser(user);
Call<Classes> response = requestInterface.queryclass(request);

response.enqueue(new Callback<Classes>() 

@Override
public void onResponse(Call<Classes> call, Response<Classes> response) 

        if(!response.isSuccessful())
            tvData.setText(response.code());
            return;
        

        Classes resp = response.body();

        String content = "";

        content += "code: " + response.code() + "\n";
        content += "classname: " + resp.getClassname() + "\n";

        tvData.setText(content);

    

@Override
public void onFailure(Call<Classes> call, Throwable t) 

            Toast.makeText(getApplicationContext(),t.getLocalizedMessage(), Toast.LENGTH_SHORT).show();
            Log.d("TAG",t.getLocalizedMessage());
        

    );

我要显示的 JSON 数组(邮递员)

[
    
        "classname": "PHYS1201",
        "subject": "PHYS12",
        "classday": "THU",
        "timestart": "18:00:00",
        "timeend": "20:00:00"
    ,
    
        "classname": "CHEM1202",
        "subject": "CHEM12",
        "classday": "FRI",
        "timestart": "12:00:00",
        "timeend": "14:00:00"
    
]

它只是在应用程序运行时显示“classname: null”。对这么长且令人困惑的帖子感到抱歉,我们将不胜感激。


澄清: POST 请求正在发送一个电子邮件(id),它返回该特定 id 的类数组。这在邮递员中有效,给了我上面显示的数组,但由于某种原因,Retrofit 没有将响应识别为数组。我曾尝试使用 List,但它似乎将响应识别为对象,而不是数组。

【问题讨论】:

【参考方案1】:

如果要获取 JSON 数组值,请使用列表。

像这样:

public interface RequestInterface 
    @POST("index.php/")
    Call<List<Classes>> queryclass(@Body ServerRequest request);

【讨论】:

当我使用列表时,改造无法识别响应并显示“预期 BEGIN_ARRAY 但找到 BEGIN_OBJECT”

以上是关于尝试处理通过 POST 方法接收的 JSON 数组 (Retrofit2)的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 POST 方法将数组发送到服务器?

PHP 从 Ajax 调用接收空的 $_POST 变量

通过 POST 发送 JSON 不起作用 - 目标 C

使用 JQuery 处理来自帖子的数据的正确方法

php中 curl模拟post发送json并接收json(转)

ASP.NET MVC Controller接收ajax post方式发送过来的json对象或数组数据