在Android上发布错误

在Android上发布错误,android,flutter,Android,Flutter,我在Android设备上发送带有此代码的POST请求时遇到问题 import 'dart:async'; import 'dart:convert'; import 'package:http/http.dart' as http; class NetworkUtil { // next three lines makes this class a Singleton static NetworkUtil _instance = new NetworkUtil.internal();

我在Android设备上发送带有此代码的POST请求时遇到问题

import 'dart:async';
import 'dart:convert';
import 'package:http/http.dart' as http;

class NetworkUtil {
  // next three lines makes this class a Singleton
  static NetworkUtil _instance = new NetworkUtil.internal();
  NetworkUtil.internal();
  factory NetworkUtil() => _instance;

  final JsonDecoder _decoder = new JsonDecoder();
  static final baseURL = "https://myurl.com";

  Future<dynamic> get(String url) {
    return http.get(baseURL+url).then((http.Response response) {
      final String res = response.body;
      final int statusCode = response.statusCode;

      if (statusCode < 200 || statusCode > 400 || json == null) {
        throw new Exception("Error while fetching data");
      }
      return _decoder.convert(res);
    });
  }

  Future<dynamic> post(String url, {Map headers, body, encoding}) {
    return http
        .post(baseURL+url, body: body, headers: headers, encoding: encoding)
        .then((http.Response response) {
      final String res = response.body;
      final int statusCode = response.statusCode;

      if (statusCode < 200 || statusCode > 400 || json == null) {
        throw new Exception("Error while fetching data");
      }
      return _decoder.convert(res);
    });
  }
}
导入'dart:async';
导入“dart:convert”;
将“package:http/http.dart”导入为http;
类NetworkUtil{
//接下来的三行使这个类成为一个单独的类
静态NetworkUtil_instance=new NetworkUtil.internal();
NetworkUtil.internal();
factory NetworkUtil()=>\u实例;
最终JsonDecoder_解码器=新JsonDecoder();
静态最终baseURL=”https://myurl.com";
未来获取(字符串url){
返回http.get(baseURL+url)。然后((http.Response){
最终字符串res=response.body;
最终int statusCode=response.statusCode;
if(statusCode<200 | | statusCode>400 | | json==null){
抛出新异常(“获取数据时出错”);
}
返回-解码器转换(res);
});
}
Future post(字符串url,{Map headers,body,encoding}){
返回http
.post(baseURL+url,主体:主体,标题:标题,编码:编码)
.然后((http.Response){
最终字符串res=response.body;
最终int statusCode=response.statusCode;
if(statusCode<200 | | statusCode>400 | | json==null){
抛出新异常(“获取数据时出错”);
}
返回-解码器转换(res);
});
}
}
它抛出了一个错误

 Instance of 'Future'
E/flutter (13631): [ERROR:topaz/lib/tonic/logging/dart_error.cc(16)] Unhandled exception:
E/flutter (13631): HandshakeException: Handshake error in client (OS Error: 
E/flutter (13631):  CERTIFICATE_VERIFY_FAILED: unable to get local issuer certificate(handshake.cc:363))
E/flutter (13631): #0      IOClient.send (package:http/src/io_client.dart:30:23)
E/flutter (13631): <asynchronous suspension>
E/flutter (13631): #1      BaseClient._sendUnstreamed (package:http/src/base_client.dart:171:38)
E/flutter (13631): <asynchronous suspension>
E/flutter (13631): #2      BaseClient.post (package:http/src/base_client.dart:56:5)
E/flutter (13631): #3      post.<anonymous closure> (package:http/http.dart:70:34)
E/flutter (13631): #4      _withClient (package:http/http.dart:167:20)
E/flutter (13631): <asynchronous suspension>
E/flutter (13631): #5      post (package:http/http.dart:70:3)
E/flutter (13631): #6      NetworkUtil.post (package:queue/class/network_util.dart:28:10)
E/flutter (13631): #7      MakeVerifyTelephoneButtonState._submitPressed (file:///Users/skulltree/Documents/TwinSynergyProjects/crossPlatform/manaqueue/lib/ui/verifybutton.dart:29:27)
E/flutter (13631): #8      GestureRecognizer.invokeCallback (package:flutter/src/gestures/recognizer.dart:102:24)
E/flutter (13631): #9      TapGestureRecognizer._checkUp (package:flutter/src/gestures/tap.dart:161:9)
E/flutter (13631): #10     TapGestureRecognizer.acceptGesture (package:flutter/src/gestures/tap.dart:123:7)
E/flutter (13631): #11     GestureArenaManager.sweep (package:flutter/src/gestures/arena.dart:156:27)
E/flutter (13631): #12     _WidgetsFlutterBinding&BindingBase&GestureBinding.handleEvent (package:flutter/src/gestures/binding.dart:147:20)
E/flutter (13631): #13     _WidgetsFlutterBinding&BindingBase&GestureBinding.dispatchEvent (package:flutter/src/gestures/binding.dart:121:22)
E/flutter (13631): #14     _WidgetsFlutterBinding&BindingBase&GestureBinding._handlePointerEvent (package:flutter/src/gestures/binding.dart:101:7)
E/flutter (13631): #15     _WidgetsFlutterBinding&BindingBase&GestureBinding._flushPointerEventQueue (package:flutter/src/gestures/binding.dart:64:7)
E/flutter (13631): #16     _WidgetsFlutterBinding&BindingBase&GestureBinding._handlePointerDataPacket (package:flutter/src/gestures/binding.dart:48:7)
E/flutter (13631): #17     _invoke1 (dart:ui/hooks.dart:134:13)
E/flutter (13631): #18     _dispatchPointerDataPacket (dart:ui/hooks.dart:91:5)
“未来”的实例 E/flatter(13631):[错误:topaz/lib/tonic/logging/dart_ERROR.cc(16)]未处理的异常: E/flatter(13631):握手异常:客户端握手错误(操作系统错误: E/flatter(13631):证书\验证\失败:无法获取本地颁发者证书(handshake.cc:363)) E/flatter(13631):#0 IOClient.send(包:http/src/io_client.dart:30:23) E/颤振(13631): E/flatter(13631):#1个BaseClient._sendUnstreamed(包:http/src/base_client.dart:171:38) E/颤振(13631): E/flatter(13631):#2 BaseClient.post(包:http/src/base_client.dart:56:5) E/Flatter(13631):#3个员额。(软件包:http/http.dart:70:34) E/flatter(13631):#4 34;与客户端(包:http/http.dart:167:20) E/颤振(13631): E/Flatter(13631):#5篇文章(包:http/http.dart:70:3) E/flatter(13631):#6 NetworkUtil.post(包:queue/class/network_util.dart:28:10) E/颤振(13631):#7生成验证电话按钮状态。#提交压力(file:///Users/skulltree/Documents/TwinSynergyProjects/crossPlatform/manaqueue/lib/ui/verifybutton.dart:29:27) E/flatter(13631):#8手势识别器.invokeCallback(包:flatter/src/signatures/recognizer.dart:102:24) 电子/颤振(13631):#9轻拍手势识别器。#检查(包装:颤振/src/手势/tap.省道:161:9) E/flatter(13631):#10 TapGestureRecognitor.AcceptPirse(包:flatter/src/pirses/tap.dart:123:7) E/flatter(13631):#11 GestureArenaManager.sweep(包:flatter/src/signatures/arena.dart:156:27) 电子/颤振(13631):#12#WidgetsFlutterBinding&BindingBase&GestureBinding.handleEvent(包装:颤振/src/手势/binding.dart:147:20) E/flatter(13631):#13 35; WidgetsFlutterBinding&BindingBase&GestureBinding.dispatchEvent(包:flatter/src/signatures/binding.dart:121:22) 电子/颤振(13631):#14#WidgetsFlutterBinding&BindingBase&GestureBinding.#手持指针事件(包装:颤振/src/手势/绑定。省道:101:7) E/flatter(13631):#15#WidgetsFlutterBinding&BindingBase&GestureBinding.#flushPointerEventQueue(包:flatter/src/signatures/binding.dart:64:7) E/flatter(13631):#16#WidgetsFlutterBinding&BindingBase&GestureBinding.#handlePointerDataPacket(包:flatter/src/signatures/binding.dart:48:7) E/颤振(13631):#17 invoke1(省道:ui/钩子。省道:134:13) E/flatter(13631):#18 dispatchPointerDataPacket(dart:ui/hooks.dart:91:5)
但是,使用相同的代码,它在iOS设备上运行良好。是否有可能我在Android Studio或其他任何设备上缺少配置。

您使用的链接不是https。还没有颁发任何安全证书。尝试http而不是https这是一个SSL证书错误,请确保设备时间和日期也正确(如果不是,证书的SSL证书可能已过期)。如果您的网站不是HTTPS,请改用HTTP

此外,在iOS上,请注意应用程序传输安全,因为默认情况下它不允许非HTTPS调用

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
    <key>NSExceptionDomains</key>
    <dict>
        <key>example.com</key>
        <dict>
            <key>NSExceptionAllowsInsecureHTTPLoads</key>
            <true/>
            <key>NSIncludesSubdomains</key>
            <true/>
        </dict>
    </dict>
</dict>
NSAppTransportSecurity
NSAllowsArbitraryLoads
NSExceptionDomains
example.com
N异常低安全Http负载
n包括多个域

我发现了问题

我们使用Let's encrypt,Android设备总是有问题,但iOS运行良好

现在,我通过切换到付费SSL证书来测试它,这是一个解决方案。它工作起来很有魅力。

我找到的最接近的解决方案是