在Android中以Json对象的形式获取改装结果

在Android中以Json对象的形式获取改装结果,android,json,retrofit,Android,Json,Retrofit,我正在使用改型API进行通信。我希望JSON对象直接存储在改造结果Bean中。我尝试了下面的过程,它产生了空值。但当使用邮递员时,结果是正确的 下面是API的输出 { "status": 101, "message": "Ok", "type": 1, "data": { "value": "adakdj4lkj43" } } 上述数据字段根据一个案例中的输入值在另一个案例日期不断变化。此数据取决于类型 下面是我的回答 public class ResponseBe

我正在使用改型API进行通信。我希望JSON对象直接存储在改造结果Bean中。我尝试了下面的过程,它产生了空值。但当使用邮递员时,结果是正确的

下面是API的输出

{
  "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) {

        }
    });