首页 > 解决方案 > Android上的POST错误

问题描述

在 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);
    });
  }
}

它抛出一个错误

 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)

但是,使用相同的代码,它在 iOS 设备上运行良好。是否有可能我缺少在 Android Studio 或其他任何东西上配置的东西。

标签: androidflutter

解决方案


我发现了问题。

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

我现在通过切换到付费 SSL 证书来测试它的解决方案。它就像一个魅力。


推荐阅读