我想知道如何将JSON数据解析为基类,因为我正在尝试编写,但是遇到未处理的异常:类型'Future'不是类型转换中类型'WeatherModel'的子类型。 这是我的代码:
abstract class BaseModel {
fromJson(Map<String, dynamic> json);
Map<String, dynamic> toJson();
}
import 'BaseModel.dart';
class WeatherModel extends BaseModel {
String success;
Result result;
Records records;
WeatherModel({this.success, this.result, this.records});
@override
fromJson(Map<String, dynamic> json) {
//...
}
@override
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
//... parse to Json
return data;
}
}
}
import 'dart:async';
import 'package:dio/dio.dart';
import 'package:flightinfo/model/BaseModel.dart';
class HttpUtils {
static Future<BaseModel> get(String url, Map<String, dynamic> params, BaseModel baseModel) async {
try {
print("url:$url,params:$params");
Response response = await Dio().get(url, queryParameters: params);
if (response != null && response.statusCode == 200) {
baseModel.fromJson(response.data);
print(baseModel);
return baseModel;
}
print(response);
} catch (exception) {
print(exception);
}
return null;
}
}
class WeatherRequest {
Future<WeatherModel> get() async {
return HttpUtils.get(_url, _params,new WeatherModel());
}
}
我认为HttpUtils.get
直接指向BaseModel
具有扩展性。这在Java中很常见,但是在Dart中,我在WeatherRequest
的下面一行中得到一个例外:
return HttpUtils.get(_url, _params,new WeatherModel());
未处理的异常:类型“未来”不是类型转换中类型“天气模型”的子类型
在Dart中,如何照顾演员?
答案 0 :(得分:0)
由于get()
的{{1}}方法将WeatherRequest
返回到Future
,但您却返回了WeatherModel
,因此可能会发生错误。
尝试添加
Future<BaseModel>
来解决await
转换为Future
的问题,然后再返回。
BaseModel
此外,根据此SO answer:
您可以将一个对象强制转换为其父类,但是不能将一个对象强制强制转换为其子类。
因此,将return (await HttpUtils.get(_url, _params,new WeatherModel()) );
隐式转换为BaseModel
可能无法正常工作。相反,您可以像WeatherModel
一样向BaseModel
添加一个辅助方法并返回BaseModel.toWeatherModel
WeatherModel
或修改abstract class BaseModel {
toWeatherModel(){
//...
}
}
的{{1}}方法以返回get
。
WeatherRequest