在Android中获取Json Object的Retrofit结果

时间:2016-06-26 18:13:01

标签: android json retrofit

我正在使用Retrofit API进行通信。我希望JSON Object直接存储在Retrofit Result Bean中。我尝试了以下过程,它以null值生成。但在使用邮递员时,结果是恰当的。

以下是API的输出

{
  "status": 101,
  "message": "Ok",
  "type": 1,
  "data": {
    "value": "adakdj4lkj43"
  }
}

上面的数据字段按照一个案例值的输入继续改变,在其他情况下,这个数据取决于类型

下面的

是我的ResponseBean

public class ResponseBean {
    private int status = 0;
    private String message = "";
    private int type = 0;
    private JSONObject data = new JSONObject();
}

执行改装调用时,我将此数据作为{},这意味着没有数据。请帮我解决这个问题。在此先感谢。

4 个答案:

答案 0 :(得分:1)

我正在使用改装版本2。在gradle文件中添加以下依赖项

compile 'com.squareup.retrofit2:retrofit:2.0.0-beta4'
compile 'com.squareup.retrofit2:converter-gson:2.0.0-beta4'

像这样创建一个interface

public interface Api {

    @FormUrlEncoded
    @POST("Login")
    Call<ResponseBean> loginUser(@Field("uuid") String email, @Field("PASS") String password );
}

我使用this

生成了模型

添加以下类

public class ResponseBean {

    private int status;
    private String message;
    private int type;
    private Data data;

    public int getStatus() {
        return status;
    }


    public void setStatus(int status) {
        this.status = status;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public int getType() {
        return type;
    }

    public void setType(int type) {
        this.type = type;
    }

    public Data getData() {
        return data;
    }

    public void setData(Data data) {
        this.data = data;
    }

}

和数据类

public class Data {

    private String value;

    public String getValue() {
        return value;
    }

    public void setValue(String value) {
        this.value = value;
    }

}

现在在Activity

 ResponseBean responseBean;
 Retrofit retrofit = new Retrofit.Builder()
     .baseUrl("https://localhost:8080/API/")
     .build();

 Api api = retrofit.create(Api.class);

 Call<ResponseBean> call = api.loginUser("your_user_id","your_password");
    call.enqueue(new Callback<ResponseBean>() {
        @Override
        public void onResponse(Call<ResponseBean> call, Response<ResponseBean> response) {
            responseBean = response.body();
        }

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

        }
    });

现在,您将jsonobject直接存储在responsebean中。希望这有帮助

答案 1 :(得分:0)

public class ResponseBean {
    private int status;
    private String message;
    private int type;
    private String data;

    public int getStatus() {
        return status;
    }

    public void setStatus(int status) {
        this.status = status;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public int getType() {
        return type;
    }

    public void setType(int type) {
        this.type = type;
    }

    public String getData() {
        return data;
    }

    public void setData(String data) {
        this.data = data;
    }

    public ResponseBean(JSONObject object){
        try {
            setStatus(object.getInt("status"));
        } catch (JSONException e) {
            setStatus(0);
        }

        try {
            setMessage(object.getString("status"));
        } catch (JSONException e) {
            setMessage("");
        }

        try {
            setType(object.getInt("type"));
        } catch (JSONException e) {
            setType(0);
        }

        try {
            setData(object.getString("data"));
        } catch (JSONException e) {
            setData("");
        }
    }

    @Override
    public String toString() {
        JSONObject object = new JSONObject();
        try {
            object.put("status", getStatus());
            object.put("message", getMessage());
            object.put("type", getType());
            object.put("data", getData());
        } catch (JSONException e) {
            e.printStackTrace();
        }

        return object.toString();
    }
}

添加数据

try {
        JSONObject object = new JSONObject("yourData");
        ResponseBean responseBean = new ResponseBean(object);
    } catch (JSONException e) {
        e.printStackTrace();
}

获取数据

responseBean.getMessage();

答案 2 :(得分:0)

由于Json最终是你想要的,你可以试试这个:

<ul class="nav nav-pills nav-stacked">
<?php
foreach($record->$row){
?>
<li> <?php echo $row->std_fname; ?></li>
<li> <?php echo $row->std_lname; ?></li>
<li> <?php echo $row->std_email; ?></li>
<?php
}
?>
</ul>

添加getter和setter后,您可以执行以下操作:

public class ResponseBean {
    private int status = 0;
    private String message = "";
    private int type = 0;
    private ValueObject data;
}

public class ValueObject {
   private String value;
}

根据需要检查您的日志。

答案 3 :(得分:0)

你想要做的概念是完美的。但唯一出错的是在Retrofit Bean中使用JSONObject。 Retrofit是一个将JSONObject转换为Bean对象的库。最好先尝试使用Object代替JSONObject。我认为Retrofit确实可以将JSONObject的一部分转换为Object。所以试试

            public class ResponseBean {
                            private int status = 0;
                            private String message = "";
                            private int type = 0;
                            private Object data = new Object();
            }

而不是将其用作DataType。

private JSONObject data = new JSONObject();