【问题标题】:How can I solve the error that I get when compiling my mobile app in flutter?如何解决在 Flutter 中编译移动应用程序时遇到的错误?
【发布时间】:2020-08-28 13:41:24
【问题描述】:

这是我编译时遇到的错误

IA 模拟器上的 AOSP 上的 Observatory 调试器和分析器可在以下位置获得:http://127.0.0.1:55598/YYOpp337z7w=/ E/flutter(19984):[错误:flutter/lib/ui/ui_dart_state.cc(157)]未处理的异常:NoSuchMethodError:方法'toDouble'在null上调用。 E/颤振(19984):接收者:空 E/flutter (19984):尝试调用:toDouble()

这是我向 REST API 发出请求的类

class HttpHandler{

final String  _baseUrl = "api.themoviedb.org";
  final String _lenguaje = "es-ES";

Future<dynamic> getJson(Uri uri) async{
      //Primera peticion api  
    http.Response response = await http.get(uri); //amacena la respuesta
    return json.decode(response.body);

    }

    Future<List<Media>> fetchMovies(){
      //define la la url
      var uri = new Uri.https(_baseUrl, "3/movie/popular",{
        'api_key' : API_KEY,
        'page': "1",
        'language ': _lenguaje
      });

      return getJson(uri).then(((data) =>
          data['results'].map<Media>((item)=>new Media(item)).toList()
      ));
    }

我的构造方法基于 API 请求发送给我的对象的设计

class Media {

  int id;
  double voteAverage;
  String title;
  String posterPath;
  String  backdropPath;
  String overview;
  String releaseDate;
  List<dynamic> genreIds;

  String getPosterUrl() => getMediumPictureUrl(posterPath);

//Definir el constructor
//Basado de diseño de factory en la base de disñeo de objetos
factory Media(Map jsonMap){
    try {
       return new Media.deserialize(jsonMap);
    } catch (ex) {

      throw ex;
     }

     }

    Media.deserialize(Map json) :
    id = json["id"].toInt(),
    voteAverage = json["voteAverage"].toDouble(),
    title = json["title"],
    posterPath = json["posterPath"]?? "",
    backdropPath = json["backdropPath"]?? "",
    overview =  json["overview"],
    releaseDate = json["releaseDate"],
    genreIds = json["genreIds"].toList;


}

这是在这种情况下调用请求以显示电影列表的颤振视图

class MediaList extends StatefulWidget {
  @override
  _MediaListState createState() => new _MediaListState();
 }
class _MediaListState extends State<MediaList> {
List<Media> _media = new List();
  @override
  void initState(){
    super.initState();
    loadMovies();
  }
  void loadMovies()async{
    var movies = await HttpHandler().fetchMovies();
    setState(() {
      _media.addAll(movies);
    });
  }

  @override
  Widget build(BuildContext context) {
   return new Container(
     child: new ListView.builder(
       itemCount: _media.length,
       itemBuilder: (BuildContext context ,int index){
          return new Column(
            children: <Widget>[
                new Image.network(_media[index].getPosterUrl())
            ],
          );
       },
     ),

   );
  }
}

【问题讨论】:

  • voteAverage = json["voteAverage"].toDouble(),将其替换为 voteAverage = (json["voteAverage"]==null)?' ':json["voteAverage"].toDouble();

标签: api rest flutter flutter-test


【解决方案1】:

在您的 voteAverage = json["voteAverage"].toDouble(), 上添加一个空检查

更新后的代码将类似于voteAverage = json["voteAverage"]?.toDouble(),

希望这能解决您的问题!

【讨论】:

    【解决方案2】:

    json["voteAverage"] 对象为空值,因此无法执行操作。检查 json 对象是否存在并检查 voteAverage 是否存在。如果不是这种情况,则该 url 很可能是错误的,或者您没有等待响应。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-26
      • 1970-01-01
      • 1970-01-01
      • 2012-09-18
      • 1970-01-01
      • 2019-02-02
      • 2022-10-15
      • 1970-01-01
      相关资源
      最近更新 更多