我刚刚学会了如何在flutter中使用BuiltValue
。在使用这个库之前,我用Chopper
实现的webservice工作正常。
现在,在更改为使用BuiltValue
后,出现了错误,无法解决此问题
错误是:
_InternalLinkedHashMap不是“BuiltRegister”类型的子类型
我的服务器只获取移动电话号码,这是json响应结构:
{
"message": "",
"userInformation": {
"active": 1,
"name": "",
"email": "aaaa@gmail.com",
"avatar": "",
"mobile_number": "5656565656",
"teammate": 0,
"experience": null,
"age": 44,
"gender": 0,
"height": 555,
"weight": 80400,
"insurance": null,
"job": "dddddd",
"created_at": "2019-06-23 09:26:41",
"updated_at": "2019-08-26 17:51:24",
"api_token": "5QbgyBdcL"
},
"tickets": [
{
"id": 3,
"subject": "3",
"description": "3",
"ticket_number": 5273,
"priority": 1,
"section": 1,
"solved": 0,
"created_at": "2019-06-23 09:26:41",
"updated_at": "2019-08-26 17:51:24",
"user": {
"active": 1,
"name": "",
"email": "aaaa@gmail.com",
"avatar": "",
"mobile_number": "5656565656",
"teammate": 0,
"experience": null,
"age": 44,
"gender": 0,
"height": 555,
"weight": 80400,
"insurance": null,
"job": "dddddd",
"created_at": "2019-06-23 09:26:41",
"updated_at": "2019-08-26 17:51:24",
"api_token": "5QbgyBdcL"
},
"reply": [
{
"ticket_id": 3,
"reply": "5050505050505050050505005",
"created_at": "2019-06-23 09:26:41",
"updated_at": "2019-08-26 17:51:24",
"user": {
"active": 1,
"name": "",
"email": "aaaa@gmail.com",
"avatar": "",
"mobile_number": "5656565656",
"teammate": 0,
"experience": null,
"age": 44,
"gender": 0,
"height": 555,
"weight": 80400,
"insurance": null,
"job": "dddddd",
"created_at": "2019-06-23 09:26:41",
"updated_at": "2019-08-26 17:51:24",
"api_token": "5QbgyBdcL"
}
}
]
}
],
"status": 5
}
我构建buildRegister
具有结构的寄存器:
part 'built_register.g.dart';
abstract class BuiltRegister implements Built<BuiltRegister, BuiltRegisterBuilder> {
//@formatter:off
String get mobile_number;
@nullable String get message;
@nullable BuiltUser get userInformation;
@nullable int get status;
@nullable BuiltList<BuiltTickets> get tickets;
//@formatter:on
BuiltRegister._();
factory BuiltRegister([updates(BuiltRegisterBuilder b)]) = _$BuiltRegister;
static Serializer<BuiltRegister> get serializer => _$builtRegisterSerializer;
}
abstract class BuiltUser implements Built<BuiltUser, BuiltUserBuilder> {
//@formatter:off
String get mobile_number;
String get active;
@nullable String get name;
@nullable String get email;
@nullable String get avatar;
@nullable String get teammate;
@nullable String get experience;
@nullable String get age;
@nullable String get gender;
@nullable String get height;
@nullable String get weight;
@nullable String get insurance;
@nullable String get job;
String get created_at;
String get updated_at;
String get api_token;
//@formatter:on
BuiltUser._();
factory BuiltUser([updates(BuiltUserBuilder b)]) = _$BuiltUser;
static Serializer<BuiltUser> get serializer => _$builtUserSerializer;
}
abstract class BuiltTickets implements Built<BuiltTickets, BuiltTicketsBuilder> {
//@formatter:off
int get id;
String get subject;
String get description;
int get ticket_number;
int get priority;
int get section;
int get solved;
String get created_at;
String get updated_at;
BuiltUser get user;
@nullable BuiltReply get reply;
//@formatter:on
BuiltTickets._();
factory BuiltTickets([updates(BuiltTicketsBuilder b)]) = _$BuiltTickets;
static Serializer<BuiltTickets> get serializer => _$builtTicketsSerializer;
}
abstract class BuiltReply implements Built<BuiltReply, BuiltReplyBuilder> {
//@formatter:off
int get ticket_id;
String get reply;
String get created_at;
String get updated_at;
BuiltUser get user;
//@formatter:on
BuiltReply._();
factory BuiltReply([updates(BuiltReplyBuilder b)]) = _$BuiltReply;
static Serializer<BuiltReply> get serializer => _$builtReplySerializer;
}
终端返回中的build
命令成功,我没有任何问题,现在这是我的Chopper
实现:
part 'api_service.chopper.dart';
@ChopperApi(baseUrl: '/api/v1')
abstract class DiabetistApiService extends ChopperService {
@Post(path: '/register')
Future<Response<BuiltRegister>> registerUser(@Body() BuiltRegister body);
static DiabetistApiService create() {
final client = ChopperClient(
baseUrl: 'http://www.example.com',
services: [
_$DiabetistApiService(),
],
converter: BuiltValueConvert(),
interceptors: [
HeadersInterceptor({'Content-Type': 'application/json'}),
HttpLoggingInterceptor(),
(Response response) async {
if (response.statusCode == 404) {
chopperLogger.severe('404 NOT FOUND');
}
}
]);
return _$DiabetistApiService(client);
}
}
和BuiltValueConver
拦截器实现的Chopper
:
class BuiltValueConvert extends JsonConverter {
@override
Request convertRequest(Request request) {
//@formatter:off
return super
.convertRequest(
request.replace(
body: serializers.serializeWith(
serializers.serializerForType(
request.body.runtimeType), request.body
)
)
);
//@formatter:on
}
@override
Response<BodyType> convertResponse<BodyType, singleItemType>(Response response,) {
final Response dynamicResponse = super.convertResponse(response);
final BodyType customBody = _convertToCustomObject(dynamicResponse.body);
return dynamicResponse.replace<BodyType>(body: customBody);
}
dynamic _convertToCustomObject<SingleItemType>(dynamic element) {
if (element is SingleItemType) return element;
if (element is List)
return _deserializerListOf<SingleItemType>(element);
else
return _deserialize<SingleItemType>(element);
}
BuiltList<SingleItemType> _deserializerListOf<SingleItemType>(List dynamicList) {
return BuiltList<SingleItemType>(
dynamicList.map((element) => _deserialize<SingleItemType>(element))
);
}
SingleItemType _deserialize<SingleItemType>(Map<String, dynamic> value) {
return serializers.deserializeWith(serializers.serializerForType(SingleItemType), value);
}
}
这是我想如何连接到服务器,发送和获取结果:
final register = BuiltRegister((b) => b..mobile_number = mobileNumber);
final response = await Provider.of<DiabetistApiService>(context).registerUser(register);
当我试图打印响应时,我得到了一个错误
问题解决了!!!
我变了
convertResponse<BodyType, singleItemType>
到
convertResponse<BodyType, SingleItemType>
//我正在尝试此代码,但它没有添加到firebase //它给出了这些错误 处理手势时引发了以下_TypeError:类型“List”不是类型“String”的子类型 抛出异常时,这是堆栈:#0个SharedReferences。getString(包:共享首选项/共享首选项。dart:98:35)#1 CheckItemInNot(包:e_shop/Store/storehome.dart:33
我有一个错误,当试图解析我的JSON并显示在文本中,而不是作为一个。 下面是我的JSON结构。 这是我的未来API异步。 这是我显示JSON的代码。 当我试图获取数据时,我得到了这样的错误。 我应该修复哪个代码?
问题内容: 我目前正在构建一个应用程序,以通过api读取数据,并且试图从JSON Placeholder解析JSON api。 我为用户创建了一个模型类(users_future_model.dart): 这是将json读取到小部件中的main.dart: 这是我尝试读取的JSON信息,尽管它只是其中的一小部分: 我当前遇到的错误是: 我该如何纠正此错误? 问题答案: API返回JSON数组而不是
使用搜索函数显示从第三方API获取的A-List该错误仅在我运行应用程序时显示,显示为_InternalLinkedHashMap 请欢迎***编辑一个新的错误显示在玩代码后此错误显示类型'String'不是Map dynamic,dynamic类型的子类型- 数据模型类 错误
因此,我创建了一个应用程序,通过api读取数据,并尝试解析JSON api 这是我的错误截图 我试着把它改成一个列表,但它仍然读取一个错误 这是我的密码大象。飞奔 如何纠正此错误?请帮忙
我试图获得用户信息后,用户输入电子邮件和密码。我使用的api会返回我用户的额外信息,所以我尝试从中获取这些信息。 我试图解析这个json: 这些是我的模型: 这是我发送电子邮件、密码和获取用户数据的部分: 这是给我错误的部分 我打印了响应体,它给出了我想要的字符串,但是jsonDecode返回了一个列表,所以我不能使用它。我怎样才能解决这个问题?提前谢谢。