在Android中以Json对象的形式获取改装结果
我正在使用改型API进行通信。我希望JSON对象直接存储在改造结果Bean中。我尝试了下面的过程,它产生了空值。但当使用邮递员时,结果是正确的 下面是API的输出在Android中以Json对象的形式获取改装结果,android,json,retrofit,Android,Json,Retrofit,我正在使用改型API进行通信。我希望JSON对象直接存储在改造结果Bean中。我尝试了下面的过程,它产生了空值。但当使用邮递员时,结果是正确的 下面是API的输出 { "status": 101, "message": "Ok", "type": 1, "data": { "value": "adakdj4lkj43" } } 上述数据字段根据一个案例中的输入值在另一个案例日期不断变化。此数据取决于类型 下面是我的回答 public class ResponseBe
{
"status": 101,
"message": "Ok",
"type": 1,
"data": {
"value": "adakdj4lkj43"
}
}
上述数据字段根据一个案例中的输入值在另一个案例日期不断变化。此数据取决于类型
下面是我的回答
public class ResponseBean {
private int status = 0;
private String message = "";
private int type = 0;
private JSONObject data = new JSONObject();
}
当执行改装调用时,我得到的数据是{},这意味着没有数据。请帮我解决这个问题。提前谢谢
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();
由于Json最终是您想要的,您可以尝试以下方法:
public class ResponseBean {
private int status = 0;
private String message = "";
private int type = 0;
private ValueObject data;
}
public class ValueObject {
private String value;
}
添加getter和setter后,可以执行以下操作:
ResponseBeam rBeam = //Retrofit response here.
JsonObject requiredJsonObject = new JsonObject();
requiredJsonObject.put("value", rBeam.getData().getValue());
Log.d(TAG, requiredJsonObject);
根据需要查看您的日志。您正在尝试的概念非常完美。但是这里唯一出错的是在改造Bean中使用JSONObject。改型是一个将JSONObject转换为Bean对象的库。最好尝试对象而不是JSONObject。我认为改造可以将JSONObject的一部分转换为Object。所以试试看
public class ResponseBean {
private int status = 0;
private String message = "";
private int type = 0;
private Object data = new Object();
}
而不是将其用作数据类型
private JSONObject data = new JSONObject();
我正在使用改型版本2。在gradle文件中添加以下依赖项
compile 'com.squareup.retrofit2:retrofit:2.0.0-beta4'
compile 'com.squareup.retrofit2:converter-gson:2.0.0-beta4'
像这样创建一个界面
public interface Api {
@FormUrlEncoded
@POST("Login")
Call<ResponseBean> loginUser(@Field("uuid") String email, @Field("PASS") String password );
}
和数据类
public class Data {
private String value;
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}
现在在您的活动中
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) {
}
});
ResponseBean-ResponseBean;
改装改装=新改装.Builder()
.baseUrl(“https://localhost:8080/API/")
.build();
Api=改装.create(Api.class);
Call Call=api.loginUser(“您的用户id”、“您的密码”);
call.enqueue(新回调(){
@凌驾
公共void onResponse(调用、响应){
responseBean=response.body();
}
@凌驾
失败时公共无效(调用调用,可丢弃的t){
}
});
现在,您将jsonobject直接存储在responsebean中。希望这有帮助您使用哪种改装版本?你能粘贴你的改型配置吗?编译'com.squareup.reformation2:reformation:2.1.0'这是我正在使用的改型在这篇文章或文章中?你能提供url吗?如果它比敏感,在发布之前重命名它,只需要url模式。这是一个本地url,这是POST方法。url是输入为{“USERNAME”:“UID”,“PASS”:“pass1234”}我想将数据的值提取为其他字段的jsonobject,这项工作做得很好;我希望得到完整的数据作为jsonobject。说{“value”:“adakdj4lkj43”}我想在这个json对象中使用gson-on-loking将其转换为类型为的对象。Bro我尝试将其作为json对象的主要原因是,在不同的情况下,数据在一个case值中不同,在另一个消息的另一个日期中不同。如果我使用您提供的方法,我必须编写至少6个类。但我尝试的方法将在4个类中完成相同的操作。我只提到了3个API,但我有25个类似的API,我必须这样做,handel allI没有观察到值的变化,所以这样做了。
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) {
}
});