Попытка обработать массив JSON, полученный методом POST (Retrofit2) - PullRequest
0 голосов
/ 04 ноября 2019

У меня проблемы с попыткой разобрать массив JSON, полученный методом POST. Я очень новичок в этом, пожалуйста, прости меня за любое невежество.

RequestInterface.java

public interface RequestInterface {

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

}

Classes.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;
}

}

Activity (Retrofit)

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), которое возвращает массив классов для этогоконкретный идентификаторЭто работает в почтальоне, давая мне массив, показанный выше, но по какой-то причине ответ не распознается Retrofit как массив. Я попытался использовать List , но он, кажется, распознает ответ как объект, а не массив.

1 Ответ

1 голос
/ 04 ноября 2019

Используйте список, если хотите получить значение массива JSON.

, например:

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