在处理错误时解析数据时出错
意外字符(位于字符2) {错误:{代码: 400,消息:无法读取null的属性'password‘,详细信息...^
抛出了另一个异常: FormatException:意外字符(位于字符2)
MyResponse
{
"error": {
"code": 400,
"message": "Cannot read property 'password' of null",
"details": ""
}
}这就是我尝试解析响应的方式
LoginErrorResponse errorResponse = LoginErrorResponse.fromJson(jsonDecode(snapshot.data.error.errorBody));
密码:{错误:{代码: 400,消息:无法读取null的属性‘errorBody’,详细信息:}}
ModelClass
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;
}
}响应处理
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
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();
}
})发布于 2020-09-02 00:34:34
几个小时后,我发现一个solution.The技巧就是对错误响应进行编码
if(e.response!=null) {
return ApiResponse.failed<ResultType>(Error(e.response.statusCode,
e.response.statusMessage, jsonEncode(e.response.data)));
}https://stackoverflow.com/questions/63690414
复制相似问题