SocketException: ошибка ОС: соединение отказано, errno = 111 во флаттере с использованием бэкэнда django - PullRequest
0 голосов
/ 21 апреля 2019

Я создаю приложение для флаттера с помощью django rest-framework.API регистрации работает нормально в Postman, но после некоторой успешной регистрации из приложения флаттер показывает вышеуказанную ошибку.Запрос отправлен по адресу https.

Удален csrf.Ничего не происходит.

Запрос:

var data = {'email':signupemailidcontroller.text,
            'password1':passwordcontroller.text,
            'password2':confirmpasswordcontroller.text,
           };
        //http request here
        await http.post(websitesignupurl,
                        headers: headers,
                        body: json.encode(data))
          .then((onResponse){
            print(onResponse.body);
          }).catchError((onerror){
            print(onerror.toString());
        });

Вывод на консоль:

SocketException: ошибка ОС: соединение отклонено, errno = 111

Я ожидаюответом на этот запрос будет объект Json, содержащий пользователя и токен.

Ответы [ 2 ]

0 голосов
/ 23 июля 2019

Попробуйте добавить <uses-permission android:name="android.permission.INTERNET"/> в манифест.Это решило эту проблему для меня.

0 голосов
/ 21 апреля 2019

Harnish, для отладки этой ошибки требуются дополнительные сведения.

  1. Вы работаете на сервере локально или общаетесь с удаленным сервером?
  2. Работаете ли выприложение на эмуляторе Android?

Возможное решение:

Если вы работаете на сервере локально и используете эмулятор Android, тогда конечная точка вашего сервера должна быть10.0.2.2:8000 вместо localhost:8000, поскольку AVD использует 10.0.2.2 в качестве псевдонима для интерфейса обратной связи вашего хоста (т. Е.) localhost

Примечание по фьючерсам

Iвыше заметил, что код использует await, а затем в той же строке.Это может быть запутанным, чтобы быть понятным, await используется для приостановки выполнения до завершения будущего, а then - это функция обратного вызова, которая выполняется после завершения будущего.То же самое можно записать, как показано ниже

void myFunction() async {
    var data = {};
    var response = await http.post(URL, headers:headers, body:data);
    if (response.statusCode == 200) {
        print(reponse.body);
    } else {
       print('A network error occurred');
    }
}

или не асинхронным / ожидающим методом

void myFunction() {
    var data = {};
    http.post(URL, headers:headers, body:data)
    .then((response) => print(response.body))
    .catchError((error) => print(error));
}

Для получения более подробной информации о фьючерсах в дротике, пожалуйста, прочитайте https://www.dartlang.org/tutorials/language/futures

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...