首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >意外字符(在字符2处)

意外字符(在字符2处)
EN

Stack Overflow用户
提问于 2020-09-01 23:07:57
回答 1查看 164关注 0票数 0

在处理错误时解析数据时出错

意外字符(位于字符2) {错误:{代码: 400,消息:无法读取null的属性'password‘,详细信息...^

抛出了另一个异常: FormatException:意外字符(位于字符2)

MyResponse

代码语言:javascript
复制
   {
    "error": {
        "code": 400,
        "message": "Cannot read property 'password' of null",
        "details": ""
    }
}

这就是我尝试解析响应的方式

LoginErrorResponse errorResponse = LoginErrorResponse.fromJson(jsonDecode(snapshot.data.error.errorBody));

密码:{错误:{代码: 400,消息:无法读取null的属性‘errorBody’,详细信息:}}

ModelClass

代码语言:javascript
复制
class LoginErrorResponse {
    LoginError error;

    LoginErrorResponse({this.error});

    LoginErrorResponse.fromJson(Map<String, dynamic> json) {
        error = json['error'] != null ? new LoginError.fromJson(json['error']) : null;
    }

    Map<String, dynamic> toJson() {
        final Map<String, dynamic> data = new Map<String, dynamic>();
        if (this.error != null) {
            data['error'] = this.error.toJson();
        }
        return data;
    }
}

class LoginError {
    int code;
    String message;
    String details;

    LoginError({this.code, this.message, this.details});

    LoginError.fromJson(Map<String, dynamic> json) {
        code = json['code'];
        message = json['message'];
        details = json['details'];
    }

    Map<String, dynamic> toJson() {
        final Map<String, dynamic> data = new Map<String, dynamic>();
        data['code'] = this.code;
        data['message'] = this.message;
        data['details'] = this.details;
        return data;
    }
}

响应处理

代码语言:javascript
复制
Future<ApiResponse<ResultType>> _getResponse() async {

      try {
        Response response = await createApiAsync();
        print(response.data.toString());
        if (response.statusCode >= 200 && response.statusCode <= 299) {
          ResultType responseModel = parseJson(response);
          onSuccess(responseModel);
          return ApiResponse.success<ResultType>(responseModel);
        } else{
          return ApiResponse.failed<ResultType>(Error(response.statusCode,
              response.data.toString(), response.statusMessage.toString()));

        }
      } on DioError catch (e, stacktrace) {
        if(e.response!=null) {
          return ApiResponse.failed<ResultType>(Error(e.response.statusCode,
              e.response.statusMessage, e.response.data.toString()));

        } else{
          // Something happened in setting up or sending the request that triggered an Error
          print(e.request);
          print(e.message);
        }        // return ApiResponse.failed<ResultType>(
        //     Error(response.statusCode, response.statusMessage,response.data));
      }

  }

我的StreamBuilder

代码语言:javascript
复制
 StreamBuilder<ApiResponse<LoginResponse>>(
          stream: bloc.subject.stream,
          builder: (context, snapshot) {
            if (!snapshot.hasData) {
              print("bkbbjbkjhjkj:${snapshot.data.error.statusCode}");
    
              return Text("${snapshot.data.error.errorBody}");
            } else {
    
              switch (snapshot.data.status) {
                case Status.LOADING:
                return CircularProgressIndicator();
                  break;
                case Status.SUCCESS:
              return  Text("${snapshot.data.data}");
                  break;
                case Status.ERROR:
                  print("myerrorhandling:${snapshot.data.error.errorBody}");
                  if(snapshot.data.error.errorBody.isNotEmpty){
                  LoginErrorResponse errorResponse = LoginErrorResponse.fromJson(json.decode(snapshot.data.error.errorBody));
                  print("asdatthyhtgdschyt${errorResponse.error.message}");
                  }
                 return Text("${snapshot.data.error}");
                  break;
                default:
                  return Container();
    //    }
              }
              return Container();
            }
          })
EN

回答 1

Stack Overflow用户

发布于 2020-09-02 00:34:34

几个小时后,我发现一个solution.The技巧就是对错误响应进行编码

代码语言:javascript
复制
if(e.response!=null) {
return ApiResponse.failed<ResultType>(Error(e.response.statusCode,
e.response.statusMessage, jsonEncode(e.response.data)));

}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63690414

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档