Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在改型2.0中处理JSON响应_Android_Json_Retrofit2_Pojo - Fatal编程技术网

Android 在改型2.0中处理JSON响应

Android 在改型2.0中处理JSON响应,android,json,retrofit2,pojo,Android,Json,Retrofit2,Pojo,我知道这是一个老生常谈的问题。但我不明白我错在哪里。 我从这个JSON中得到了空结果 { "error": { "dateTimeUtc": "2017-12-26T05:46:05.1126801+00:00", "errorReference": "sample string 2", "errorType": "Error", "title": "sample string 3", "code": "sample string 4", "mes

我知道这是一个老生常谈的问题。但我不明白我错在哪里。 我从这个JSON中得到了空结果

{
"error": {
    "dateTimeUtc": "2017-12-26T05:46:05.1126801+00:00",
    "errorReference": "sample string 2",
    "errorType": "Error",
    "title": "sample string 3",
    "code": "sample string 4",
    "messages": [
      "sample string 1",
      "sample string 2"
    ]
  },
  "result": {
    "message": "sample string 1"
  }
}
我有这种类型的JSON可以从第2页读取。 我创建了一个名为ReformationResponse的POJO类

private Error error;
private Result result;
public Result getResult ()
{
    return result;
}

public void setResult (Result result)
{
    this.result = result;
}

public Error getError ()
{
    return error;
}

public void setError (Error error)
{
    this.error = error;
}

@Override
public String toString()
{
    return "ClassPojo [result = "+result+", error = "+error+"]";
}`
现在在call.enque()方法中处理响应,如

call.enqueue(new Callback<RegisterUser>() {
        @Override
        public void onResponse(Call<RetrofitResponce> call, Response<RetrofitResponce> response) {

            try {
                RetrofitResponce retrofitResponce= response.body();

                Error error = retrofitResponce.getError();
                Result result=retrofitResponce.getResult();


                Log.e("Eroor", "rr  " + error.getTitle().toString());
            } catch (Exception e) {

            }
        }

        @Override
        public void onFailure(Call<RetrofitResponce> call, Throwable t) {
            Log.e("Failure ", "fail " + t.toString());
        }
    });

}

您必须在响应类中为每个与web服务名称相同的字段添加@SerializedName

e、 g

请使用此网站从JSON响应创建类。

在这之后,你必须检查响应是否成功

call.enqueue(new Callback<RegisterUser>() {
        @Override
        public void onResponse(Call<RetrofitResponce> call, Response<RetrofitResponce> response) {

            try 
            {
                if(response.isSuccessful() && response.body() != null)
                {
                    RetrofitResponce retrofitResponce= response.body();
                    Error error = retrofitResponce.getError();
                    Result result=retrofitResponce.getResult();
                 }

            } catch (Exception e) {

            }
        }

        @Override
        public void onFailure(Call<RetrofitResponce> call, Throwable t) {
            Log.e("Failure ", "fail " + t.toString());
        }
    });
call.enqueue(新回调(){
@凌驾
公共void onResponse(调用、响应){
尝试
{
if(response.issusccessful()&&response.body()!=null)
{
RefughtResponse-RefughtResponse=response.body();
Error Error=REFRONESPONE.getError();
结果=reformationResponse.getResult();
}
}捕获(例外e){
}
}
@凌驾
失败时公共无效(调用调用,可丢弃的t){
Log.e(“Failure”,“fail”+t.toString());
}
});

尝试此Pojo进行一次
改装

public class RetrofitResponce {

@SerializedName("error")
@Expose
private Error error;
@SerializedName("result")
@Expose
private Result result;

public Error getError() {
return error;
}

public void setError(Error error) {
this.error = error;
}

public Result getResult() {
return result;
}

public void setResult(Result result) {
this.result = result;
}

}


public class Result {

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

public String getMessage() {
return message;
}

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

}


public class Error {

@SerializedName("dateTimeUtc")
@Expose
private String dateTimeUtc;
@SerializedName("errorReference")
@Expose
private String errorReference;
@SerializedName("errorType")
@Expose
private String errorType;
@SerializedName("title")
@Expose
private String title;
@SerializedName("code")
@Expose
private String code;
@SerializedName("messages")
@Expose
private List<String> messages = null;

public String getDateTimeUtc() {
return dateTimeUtc;
}

public void setDateTimeUtc(String dateTimeUtc) {
this.dateTimeUtc = dateTimeUtc;
}

public String getErrorReference() {
return errorReference;
}

public void setErrorReference(String errorReference) {
this.errorReference = errorReference;
}

public String getErrorType() {
return errorType;
}

public void setErrorType(String errorType) {
this.errorType = errorType;
}

public String getTitle() {
return title;
}

public void setTitle(String title) {
this.title = title;
}

public String getCode() {
return code;
}

public void setCode(String code) {
this.code = code;
}

public List<String> getMessages() {
return messages;
}

public void setMessages(List<String> messages) {
this.messages = messages;
}

}
public类{
@SerializedName(“错误”)
@暴露
私有错误;
@SerializedName(“结果”)
@暴露
私人结果;
公共错误getError(){
返回误差;
}
公共无效设置错误(错误){
this.error=错误;
}
公共结果getResult(){
返回结果;
}
公共void setResult(结果){
this.result=结果;
}
}
公开课成绩{
@SerializedName(“消息”)
@暴露
私有字符串消息;
公共字符串getMessage(){
返回消息;
}
公共无效设置消息(字符串消息){
this.message=消息;
}
}
公共类错误{
@SerializedName(“dateTimeUtc”)
@暴露
私有字符串dateTimeUtc;
@SerializedName(“errorReference”)
@暴露
私有字符串错误引用;
@SerializedName(“errorType”)
@暴露
私有字符串错误类型;
@序列化名称(“标题”)
@暴露
私有字符串标题;
@序列化名称(“代码”)
@暴露
私有字符串码;
@SerializedName(“消息”)
@暴露
私有列表消息=null;
公共字符串getDateTimeUtc(){
返回日期UTC;
}
公共无效setDateTimeUtc(字符串dateTimeUtc){
this.dateTimeUtc=dateTimeUtc;
}
公共字符串getErrorReference(){
返回errorReference;
}
public void setErrorReference(字符串errorReference){
this.errorReference=errorReference;
}
公共字符串getErrorType(){
返回错误类型;
}
public void setErrorType(字符串errorType){
this.errorType=errorType;
}
公共字符串getTitle(){
返回标题;
}
公共无效集合标题(字符串标题){
this.title=标题;
}
公共字符串getCode(){
返回码;
}
公共无效设置码(字符串码){
this.code=代码;
}
公共列表getMessages(){
返回消息;
}
公共消息(列出消息){
this.messages=消息;
}
}

改装回调需要响应模型,只需更改以下内容:

call.enqueue(new Callback<RetrofitResponce>() {
        @Override
        public void onResponse(Call<RetrofitResponce> call, Response<RetrofitResponce> response) {


                if (response.isSuccessful()) {
                RetrofitResponce retrofitResponce= response.body();
                if (retrofitResponce!=null) {   
                Error error = retrofitResponce.getError();
                Result result=retrofitResponce.getResult();       
                Log.e("Eroor", "rr  " + error.getTitle().toString());
              }
            }                
        }

        @Override
        public void onFailure(Call<RetrofitResponce> call, Throwable t) {
            Log.e("Failure ", "fail " + t.toString());
        }
    });
call.enqueue(新回调(){
@凌驾
公共void onResponse(调用、响应){
if(response.issusccessful()){
RefughtResponse-RefughtResponse=response.body();
如果(responce!=null){
Error Error=REFRONESPONE.getError();
结果=reformationResponse.getResult();
Log.e(“Eroor”,“rr”+error.getTitle().toString());
}
}                
}
@凌驾
失败时公共无效(调用调用,可丢弃的t){
Log.e(“Failure”,“fail”+t.toString());
}
});

快乐编码

我相信这会对你有所帮助。

你不能用单一的模式来处理成功和失败。 要获取错误正文,需要调用response.errorBody().string()

请尝试以下代码:

call.enqueue(new Callback<RegisterUser>() {
    @Override
    public void onResponse(Call<RetrofitResponce> call, Response<RetrofitResponce> response) {

       try {
                if (response.isSuccessful()) {
                Log.d("Successful",response.body();); 
                } else {
                    Log.d("errorBody ", response.errorBody().string());
                }
            } catch (Exception e) {
                Log.d("Exception ",e.toString());
            }

    }

    @Override
    public void onFailure(Call<RetrofitResponce> call, Throwable t) {
        Log.e("Failure ", "fail " + t.toString());
    }
});
call.enqueue(新回调(){
@凌驾
公共void onResponse(调用、响应){
试一试{
if(response.issusccessful()){
Log.d(“成功”,response.body(););
}否则{
Log.d(“errorBody”,response.errorBody().string());
}
}捕获(例外e){
Log.d(“异常”,例如toString());
}
}
@凌驾
失败时公共无效(调用调用,可丢弃的t){
Log.e(“Failure”,“fail”+t.toString());
}
});
试试这个

    call.enqueue(new Callback<RetrofitResponce>() {
    @Override
    public void onResponse(Call<RetrofitResponce> call, Response<RetrofitResponce> response) {

        if (response.body() != null)

       Toast.makeText(YourActivity.this,response.body().getResult(), 
       Toast.LENGTH_SHORT).show();

    }

    @Override
    public void onFailure(Call<RetrofitResponce> call, Throwable t) {
        Log.e("Failure ", "fail " + t.toString());
    }
});
call.enqueue(新回调(){
@凌驾
公共void onResponse(调用、响应){
if(response.body()!=null)
Toast.makeText(YourActivity.this,response.body().getResult(),
吐司。长度(短)。show();
}
@凌驾
失败时公共无效(调用调用,可丢弃的t){
Log.e(“Failure”,“fail”+t.toString());
}
});

可能重复@Rohit,这是成功和失败响应还是成功响应与此不同?我在PostMan软件上测试了相同的URL。我在那里获得了成功。请发布成功响应和失败响应。您得到空值,因为可能是您的成功响应和失败响应都不同。
call.enqueue(new Callback<RegisterUser>() {
    @Override
    public void onResponse(Call<RetrofitResponce> call, Response<RetrofitResponce> response) {

       try {
                if (response.isSuccessful()) {
                Log.d("Successful",response.body();); 
                } else {
                    Log.d("errorBody ", response.errorBody().string());
                }
            } catch (Exception e) {
                Log.d("Exception ",e.toString());
            }

    }

    @Override
    public void onFailure(Call<RetrofitResponce> call, Throwable t) {
        Log.e("Failure ", "fail " + t.toString());
    }
});
    call.enqueue(new Callback<RetrofitResponce>() {
    @Override
    public void onResponse(Call<RetrofitResponce> call, Response<RetrofitResponce> response) {

        if (response.body() != null)

       Toast.makeText(YourActivity.this,response.body().getResult(), 
       Toast.LENGTH_SHORT).show();

    }

    @Override
    public void onFailure(Call<RetrofitResponce> call, Throwable t) {
        Log.e("Failure ", "fail " + t.toString());
    }
});