Flutter Dio网络请求异常处理

参考

  try {
    Response r = await dio.get("https://www.instagram.com");
    print(r.headers);
  }on DioError catch(e){
     print(e);
     print(e.response.statusCode);
  }

我的代码操作如下

  void _submitData () async {
    try {
      //处理图片
      List<MultipartFile> imageList = new List<MultipartFile>();
      for (Asset asset in images) {
        //将图片转为二进制数据
        ByteData byteData = await asset.getByteData();
        List<int> imageData = byteData.buffer.asUint8List();
        MultipartFile multipartFile = new MultipartFile.fromBytes(
          imageData,
          //这个字段要有,否则后端接收为null
          filename: 'load_image',
          //请求contentType,设置一下,不设置的话默认的是application/octet/stream,后台可以接收到数据,但上传后是.octet-stream文件
          contentType: MediaType("image", "jpg"),
        );
        imageList.add(multipartFile);
      }

      FormData formData = FormData.fromMap({
        //后端要用multipartFiles接收参数,否则为null
        "photos" : imageList,
        "text" : _momentController.text
      });
      // var res = await Dio().post("你的URL", data: formData);
      //后面随意发挥
      var apiUrl = "http://47.242.63.216:9527/v1/moment";
      SharedPreferences prefs = await SharedPreferences.getInstance();
      var tokens = prefs.getString("token");

      // 后端接口的其他参数
      Map<String, dynamic> params = Map();

      //网络请求添加token请求头
      Response result = await Dio().post(apiUrl,
          data: formData, options: Options(headers: {"x-token": tokens}));
      debugPrint("${result}");
      // 使用 dio 上传图片
      // var response = await dio.post(url, data: formData, queryParameters: params);
      //
      // do something with response...
      //json解析
      Map<String, dynamic> authCode = json.decode(result.toString());
      var mes = PublishMomentData.fromJson(authCode);
      if (mes.code == 200) {
        Fluttertoast.showToast(
            msg: "发布成功",
            toastLength: Toast.LENGTH_SHORT,
            gravity: ToastGravity.CENTER,
            timeInSecForIosWeb: 10,
            backgroundColor: Colors.white,
            textColor: Colors.black,
            fontSize: 16.0);
        //返回动态界面
        Navigator.pop(context);
        Navigator.pop(context);
      } else {
        Fluttertoast.showToast(
            msg: "发布失败",
            toastLength: Toast.LENGTH_SHORT,
            gravity: ToastGravity.CENTER,
            timeInSecForIosWeb: 10,
            backgroundColor: Colors.white,
            textColor: Colors.black,
            fontSize: 16.0);
      }
    }on DioError catch(e){
      Fluttertoast.showToast(
          msg: "${e}",
          toastLength: Toast.LENGTH_SHORT,
          gravity: ToastGravity.CENTER,
          timeInSecForIosWeb: 10,
          backgroundColor: Colors.white,
          textColor: Colors.black,
          fontSize: 16.0);
      print(e);
      print(e.response.statusCode);
    }
  }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值