我正在使用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();
}
执行改装调用时,我将此数据作为{},这意味着没有数据。请帮我解决这个问题。在此先感谢。
答案 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();