【问题标题】:HttpException occure when i post a request to a server as below当我向服务器发布请求时发生 HttpException,如下所示
【发布时间】:2020-08-13 11:36:40
【问题描述】:

此方法是将订单发布到服务器,它位于 Provider 类中:

 Future<void> addOrder(OrderRequest orderRequest) async {
    final prefs = await SharedPreferences.getInstance();
    String accessToken = prefs.getString(Constants.prefsUserAccessTokenKey);
    String url = Urls.addOrderUrl;
    try {
      var bodyParams = json.encode({
        "Branch": {"Id": orderRequest.branchId},
        "DeliveryAddress":
            orderRequest.addressId == 0 ? {} : {"Id": orderRequest.addressId},
        "InBranch": orderRequest.inBranch,
        "TableNumber": orderRequest.tableNumber.toString(),
        "OrderItems": orderRequest.items,
        "PromoCode": orderRequest.promoCodeId == 0
            ? {}
            : {"Id": orderRequest.promoCodeId}
      });
      print("Url: " + url);
      print("Token: " + accessToken);
      print("Params: " + bodyParams);
      final response = await retry(
          () => http
              .post(url,
                  headers: {
                    "content-type": "application/json",
                    "Accept": "application/json",
                    "Authorization": "Bearer " + accessToken
                  },
                  body: json.encode(bodyParams))
              .timeout(Duration(seconds: 5)),
          retryIf: (e) => e is SocketException || e is TimeoutException);
      final responseData = json.decode(response.body);
      print(responseData);
      if (response.statusCode == 200) {
      } else if (response.statusCode == 401) {
        throw AuthException("401", responseData['Message']);
      } else {
        throw HttpException(responseData['Message']);
      }
    } catch (error) {
      print(error);
      throw error;
    }

  }

在我的屏幕类中,我创建了一个方法将我的数据上传到服务器,当我按下处理发布请求的按钮时使用它:

Future<void> _addOrder() async {
    OrderRequest request = OrderRequest();
    request.addressId = _selectedAddress.id;
    request.branchId = int.parse(_selectedBranchId);
    request.inBranch = _selectedAddress.id == 0;
    request.items = _cartItemsList;
    request.promoCodeId = _promoCodeId;
    request.tableNumber = _tableNumber;
    try {
      setState(() {
        _isLoading = true;
      });
      await Provider.of<OrderProvider>(context).addOrder(request);
      Provider.of<CartProvider>(context).emptyCart();
      _showDialog("Order Sent", "Your order is sent to restaurant.");
    } on HttpException catch (error) {
      _showDialog("Error adding order", error.message);
    } on SocketException catch (_) {
      _showDialog("Error adding order",
          "Please check your internet connection and try again");
    } on TimeoutException catch (_) {
      _showDialog("Error adding order",
          "Please check your internet connection and try again");
    } on AuthException catch (_) {
      _refreshToken();
    } catch (error) {
      print(error);
      _showDialog("Error adding address", "Something went wrong");
    }
  }

但是当我按下订单按钮 t 向服务器发送发布请求时,我收到了这个错误:

I/flutter (12421): {Message: Error:Object reference not set to an instance of an object.}
I/flutter (12421): HttpException: Error:Object reference not set to an instance of an object.

【问题讨论】:

    标签: flutter post dart provider httpexception


    【解决方案1】:

    这是我使用的模型类

    class OrderRequest{
      int branchId;
      int addressId;
      bool inBranch;
      int promoCodeId;
      int tableNumber;
      List<CartItem> items;
    
    OrderRequest(
      {
        this.branchId, 
        this.addressId, 
        this.inBranch, 
        this.promoCodeId, 
        this.tableNumber, 
        this.items});
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-15
      • 2016-02-27
      • 2019-07-09
      • 1970-01-01
      • 2016-04-30
      • 2016-10-26
      • 2011-07-25
      • 1970-01-01
      相关资源
      最近更新 更多