【问题标题】:Retrofit POST request response in JSON array在 JSON 数组中改造 POST 请求响应
【发布时间】:2017-02-05 04:42:53
【问题描述】:

我是这方面的初学者。我正在尝试从 JSONarray 中的 POST 请求中获取响应。当我尝试在数组上获得响应时,我可以获得 JSON 对象。这是我的 POJO

用户.Java

public class User {
    @SerializedName("username")
    @Expose
    private String user;

    @SerializedName("pass")
    @Expose
    private String pass;

    @SerializedName("status")
    @Expose
    private String status;

    @SerializedName("message")
    @Expose
    private String message;

    @SerializedName("data")
    @Expose
    private ArrayList<Datum> data;

    public User(String user, String pass, String mesaage){
        this.user = user;
        this.pass = pass;
        this.message = message;
    }

    public String getStatus() {
        return status;
    }
    public ArrayList<Datum> getData() {
        return data;
    }

    public void setData(ArrayList<Datum> data) {
        this.data = data;
    }
    public String getMessage() {
        return message;
    }
}

Datum.Java:

public class Datum {
    @SerializedName("id")
    @Expose
    private String id;

    @SerializedName("username")
    @Expose
    private String username;

    @SerializedName("mk_nama")
    @Expose
    private String mkNama;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getMkNama() {
        return mkNama;
    }

    public void setMkNama(String mkNama) {
        this.mkNama = mkNama;
    }
}

这是我的界面

public interface UserClient {
@FormUrlEncoded
@POST("login")
Call<User> loginAccount (
                            @Field("user") String username,
                            @Field("pass") String password
);}

这是我的 MainActivity

private void sendNetworkRequest(String username, String password) {

    Retrofit.Builder builder = new Retrofit.Builder()
            .baseUrl("https://prht.herokuapp.com/api/")
            .addConverterFactory(GsonConverterFactory.create());
    Retrofit retrofit = builder.build();

    UserClient client = retrofit.create(UserClient.class);
    Call<User> call = client.loginAccount(username,password);
    call.enqueue(new Callback<User>() {
        @Override
        public void onResponse(Call<User> call, Response<User> response) {
            Toast.makeText(LoginActivity.this, response.body().getData(),Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onFailure(Call<User> call, Throwable t) {
            Toast.makeText(LoginActivity.this, "BAD ERROR" , Toast.LENGTH_SHORT).show();
        }
    });
}

getData() 中似乎无法到达 JSONarray 的对象

【问题讨论】:

  • 发布您的 json 响应
  • 响应假设是这个“数据”:[ {“id”:“90”,“用户名”:“10090”,“mk_nama”:“XXXXXXXXXX”}]
  • 你的问题是只有数组列表。我的意思是您是否在其他字段中获取数据,例如 usernamepassstatus
  • 是的,它只出现在数组列表中。其他领域工作得很好
  • “我似乎无法在 getData() 中访问 JSONarray 的对象”到底是什么意思?有错误信息吗?如果有,那是什么。

标签: android json post retrofit2


【解决方案1】:

我认为这可能有效,但您可能应该更改一些细节。设置断点并调试以查看变量中发生了什么。

Data data = response.body().getData();
Datum datum = data.get(0);
Toast.makeText(LoginActivity.this,datum.getUsername() +" , "+ datum.getMkNama(),Toast.LENGTH_SHORT).show();

【讨论】:

  • 状态和消息字段是一个字符串并且工作得很好,但是当我尝试 Toast 数组列表时,我无法获取数组中的 JSONobject
  • 您是否尝试过在 toast 中使用 response.body() 来查看它会显示什么?我认为它应该给你用户对象,不是吗?
  • 是的,它只显示 getStatus()、getMessage 和 getData(),当我选择 getData() 时,它不显示里面的对象
  • 这些函数在哪里定义的?试试 getMessage 看看会发生什么?
  • 该函数像其他 getter 一样在 POJO 中定义,并且 JSONobject 工作得很好(getMessage()getStatus())唯一的问题是我什么时候尝试 Toast JSONarray跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-27
  • 2015-05-09
相关资源
最近更新 更多