Flutter Dio网络请求:DioError [DioErrorType.RESPONSE]: Http status error [400]或者[500]

DioError [DioErrorType.RESPONSE]: Http status error [400]

1)检查请求参数是否正确 :

比如,如果参数map中value是一个数组,如下代码中的innerParticipateGroupsinnerParticipators的value值不能转成toString,否则就会报400

Map<String,dynamic> params = {
      "chamberId":resultId,
      "description":remark,
      "finishAt":1564979400000,
      "innerParticipateGroups":[],
      "innerParticipators":[],
      "name":meetingName,
      "reportId":"",
      "scheduleId":"",
      "startAt":1564975800000
    };

 2)如果以上正确,检查get和post调用时参数的就收方式

看下Dio(v2.1.0)的GET请求源码:

Future<Response<T>> get<T>(
    String path, {
    Map<String, dynamic> queryParameters,
    Options options,
    CancelToken cancelToken,
    ProgressCallback onReceiveProgress,
  }) {
    return request<T>(
      path,
      queryParameters: queryParameters,
      options: _checkOptions("GET", options),
      onReceiveProgress: onReceiveProgress,
      cancelToken: cancelToken,
    );
  }

GET请求的源码中参数接受要求传入的是queryParameters, 所以调用时用queryParameters

response = await dio.get(url, queryParameters: params);

POST源码:

/// Handy method to make http POST request, which is a alias of  [Dio.request].
  Future<Response<T>> post<T>(
    String path, {
    data,
    Map<String, dynamic> queryParameters,
    Options options,
    CancelToken cancelToken,
    ProgressCallback onSendProgress,
    ProgressCallback onReceiveProgress,
  }) {
    return request<T>(
      path,
      data: data,
      options: _checkOptions("POST", options),
      queryParameters: queryParameters,
      cancelToken: cancelToken,
      onSendProgress: onSendProgress,
      onReceiveProgress: onReceiveProgress,
    );
  }

POST源码中参数接受有dataqueryParameters,调用时key用data,用queryParameters会报400,queryParameters这个key不知道具体怎么用,官方也没具体说明,官方文档中post请求都是用data传参,有懂的大神麻烦给补充一下。

response = await dio.post(url, data : params);

 DioError [DioErrorType.RESPONSE]: Http status error [500]

检查header是否设置了或者设置错了

HttpGo() {
    dio = Dio(BaseOptions(
      baseUrl: 'https://www.***.com/',
      headers: getHeaders(),
      connectTimeout: 5000,
      receiveTimeout: 3000,
    ));
  }
  getHeaders () {
    return {
      'Accept':'application/json, text/plain, */*',
      'Content-Type':'application/json',
      'Authorization':"**",
      'User-Aagent':"4.1.0;android;6.0.1;default;A001",
      "HZUID":"2",
    };
  }

 DioError [DioErrorType.RESPONSE]: Http status error [415]

把请求参数数据格式FormData换成Map<String,dynamic>试试

如果你觉得对你有用,就点个赞支持一下吧~ 谢谢啦~

 

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
直接本地的 .aar 文件依赖项不支持构建 AAR。由于任何本地 .aar 文件依赖项的类和 Android 资源不会打包在生成的 AAR 中,因此生成的 AAR 将无法使用。在这种情况下,Android Gradle 插件的早期版本也会生成损坏的 AAR(尽管不会抛出此错误)。如果您的 Flutter 项目中使用了本地的 .aar 文件依赖项,那么您需要将其转换为 Maven 依赖项,或者将其打包为本地 Maven 存储库中的库。您可以使用以下步骤解决此问题: 1. 将本地的 .aar 文件依赖项转换为 Maven 依赖项。您可以使用以下命令将其转换为 Maven 依赖项: ``` ./gradlew :<module-name>:uploadArchives ``` 然后,您可以在项目的 build.gradle 文件中添加以下 Maven 依赖项: ``` repositories { mavenLocal() // other repositories } dependencies { implementation '<group-id>:<artifact-id>:<version>' // other dependencies } ``` 2. 将本地的 .aar 文件依赖项打包为本地 Maven 存储库中的库。您可以使用以下步骤将其打包为本地 Maven 存储库中的库: a. 在项目的 build.gradle 文件中添加以下 Maven 存储库: ``` repositories { mavenLocal() // other repositories } ``` b. 在本地 Maven 存储库中创建一个新的目录,并将 .aar 文件复制到该目录中。 c. 在 .aar 文件所在的目录中创建一个新的 build.gradle 文件,并添加以下内容: ``` apply plugin: 'maven' group = '<group-id>' version = '<version>' artifactId = '<artifact-id>' repositories { mavenLocal() } uploadArchives { repositories { mavenDeployer { repository(url: "file://${System.properties['user.home']}/.m2/repository") } } } ``` d. 在 .aar 文件所在的目录中运行以下命令: ``` ./gradlew uploadArchives ``` 然后,您可以在项目的 build.gradle 文件中添加以下 Maven 依赖项: ``` repositories { mavenLocal() // other repositories } dependencies { implementation '<group-id>:<artifact-id>:<version>' // other dependencies } ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值