gpt4 book ai didi

flutter - 意外字符(在字符2处)

转载 作者:行者123 更新时间:2023-12-03 04:38:24 25 4
gpt4 key购买 nike

处理错误时解析数据时出错
意外字符(在字符2处)
{错误:{代码:400,消息:无法读取null的属性'password',详细信息...
^
引发了另一个异常:FormatException:意外字符(在字符2处)
我的回复

   {
"error": {
"code": 400,
"message": "Cannot read property 'password' of null",
"details": ""
}
}
这就是我尝试解析响应的方式
LoginErrorResponse errorResponse = LoginErrorResponse.fromJson(jsonDecode(snapshot.data.error.errorBody));
errorBody:
{错误:{代码:400,消息:无法读取null的属性'password',详细信息:}}
模型类
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();
}
})

最佳答案

几个小时后,我找到了解决方法。Trick只是在编码错误响应

if(e.response!=null) {
return ApiResponse.failed<ResultType>(Error(e.response.statusCode,
e.response.statusMessage, jsonEncode(e.response.data)));

}

关于flutter - 意外字符(在字符2处),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63690414/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com