#flutter #dart #localhost #avd
#сбой #dart #localhost #android-виртуальное устройство
Вопрос:
Я видел многочисленные сообщения на flutter &ithub, а также здесь о моей проблеме, однако она все еще сохраняется. У меня есть ASP.NET API, размещенный на порту 5001, который возвращает объект JSON. Я попытался изменить URL-адрес, чтобы он указывал на 10.0.2.2: 5001 вместо localhost, добавив 10.0.2.2 с номером порта в качестве прокси-сервера в эмуляторе, понизив рейтинг emualtor до Pie. У меня ничего из этого не сработало. Вот проблемный раздел кода, о котором идет речь:
Future<Foo&&t; fetchJson() async {
var response = await client.&et(
"http://10.0.2.2:5001/api/SampleApp/FetchObject",
headers: {"Accept": "application/json", "Content": "application/json"});
var somethin& = Foo.fromJson(jsonDecode(response.body));
return somethin&;
}
Exception has occurred.
ClientException (Connection closed before full header was received)
Комментарии:
1. На какой ОС вы работаете? URL
http://10.0.2.2:your-port
работает для меня в Windows. (Я использую Express, поэтому я не уверен, имеет ли это значение)2. Вы пробовали использовать URL:
http://127.0.0.1:5001
?3. 127 не работает, поскольку это локальный хост устройства, к сожалению, эмулятор Android имеет собственную сеть. Раздражает то, что 10.0.2.2 кажется решением, которое должно работать, но по какой-то причине оно не возвращает 200. Я на Windows.
Ответ №1:
Потратив несколько часов на поиск решения этой проблемы, выясняется, что проблема заключается в том, что SSL включен при использовании ASP.NET API. Чтобы устранить эту проблему, я отключил опцию с поддержкой SSL в свойствах проекта в моем серверном решении и использовал n&rok, чтобы сделать порт localhost общедоступным. У них также есть расширение visual Studio, которое действительно упрощает открытие туннеля.
Обратите внимание, что эта проблема имеет отношение только к вашему API, запускаемому на localhost, когда он развернут, тогда ваш эмулятор должен иметь возможность пинговать API с развернутого URL-адреса без проблем. Я полагаю, что это связано с тем, что эмулятор или физическое устройство Android не могут использовать 10.0.2.2 / 10.0.3.2 (Genymotion) с включенным SSL, поскольку запрос будет отклонен из-за сертификата.