Запросы не отправляются с установленного APK, но они работают нормально, используя симулятор и тот же телефон, подключенный к Android Studio, почему? - PullRequest
0 голосов
/ 30 января 2020

Я успешно протестировал и создал свое первое приложение с Flutter. Протестировано как на Simulator (Pixel 3 API 29), так и на тесте для запуска его непосредственно на моем телефоне, который является Mi A2 с Android v9. У меня нет проблем с использованием приложения и всех функций, но когда я создаю файл APK с помощью Android Studio - Build - Flutter - Build APK file, а затем устанавливаю его на тот же телефон, и я пытаюсь войти в систему, я получаю сообщение об ошибке - Произошла ошибка. Повторите попытку . Я использую свой собственный API и сервер для связи с приложением, и я создаю запись отладки в БД каждый раз, когда приложение отправляет запрос на сервер, но при использовании установленного файла APK я даже не получаю запись что приложение достигает сервера. Я новичок в Flutter / Android Studio, и было бы здорово, если бы вы могли помочь мне отладить эту проблему.

Это мой код, который я написал для входа в систему на случай, если он вам понадобится

Future<void> _submit() async {
  if (!_formKey.currentState.validate() &&
      (_authMode == AuthMode.Login || _authMode == AuthMode.Signup)) {
    print('Validation Failed');
    // Invalid!
    return;
  }
  if (!_agreeWithTerms && _authMode == AuthMode.Signup) {
    ErrorDialog()
        .showErrorDialog(context, 'Agree with Terms and Conditions');
    return;
  }
  _formKey.currentState.save();
  setState(() {
    _isLoading = true;
  });
  try {
    if (_authMode == AuthMode.Login) {
      // Log user in
      await Provider.of<Auth>(context, listen: false)
          .signin(_authData['email'], _authData['password']);
    } else if (_authMode == AuthMode.Signup) {
      // Sign user up
      await Provider.of<Auth>(context, listen: false).signup(
          _authData['email'],
          _authData['password'],
          _authData['name'],
          _authData['phone']);
    } else {
      await Provider.of<Auth>(context, listen: false)
          .forgotPass(_authData['email']);
      showDialog(
        context: context,
        builder: (ctx) => AlertDialog(
          title: Text('Forgot password'),
          content: SingleChildScrollView(
              child: Text('You will receive an email. Follow the instructions')),
          actions: <Widget>[
            FlatButton(
              child: Text('OK'),
              onPressed: () {
                Navigator.of(context).pushReplacementNamed('/auth');
              },
            ),
          ],
        ),
      );
      return;
    }
    Navigator.of(context).pushReplacementNamed('/qr');
  } on HttpException catch (error) {
    print(error);
    var errorMessage = 'Възникна грешка';
    if (error.toString().contains('EMAIL_EXISTS')) {
      errorMessage = 'This email already exists';
    }
    ErrorDialog().showErrorDialog(context, errorMessage);
  } catch (error) {
    print(error);
    // I am getting error, but I don't know how to debug using
    // the APK and see what is inside this error value
    const errorMessage = 'There was an error, please try again';
    ErrorDialog().showErrorDialog(context, errorMessage);
  }

  setState(() {
    _isLoading = false;
  });
}

Я использую Flutter и Android Studio. Это мой вывод из flutter docktor

doctor --verbose
[✓] Flutter (Channel stable, v1.12.13+hotfix.7, on Linux, locale bg_BG.UTF-8)
    • Flutter version 1.12.13+hotfix.7 at /home/dimitar/flutter
    • Framework revision 9f5ff2306b (преди 3 дена), 2020-01-26 22:38:26 -0800
    • Engine revision a67792536c
    • Dart version 2.7.0

[✓] Android toolchain - develop for Android devices (Android SDK version 29.0.2)
    • Android SDK at /home/dimitar/Android/Sdk
    • Android NDK location not configured (optional; useful for native profiling support)
    • Platform android-29, build-tools 29.0.2
    • Java binary at: /usr/local/android-studio/jre/bin/java
    • Java version OpenJDK Runtime Environment (build 1.8.0_202-release-1483-b49-5587405)
    • All Android licenses accepted.

[✓] Android Studio (version 3.5)
    • Android Studio at /usr/local/android-studio
    • Flutter plugin version 42.1.1
    • Dart plugin version 191.8593
    • Java version OpenJDK Runtime Environment (build 1.8.0_202-release-1483-b49-5587405)

[!] Connected device
    ! No devices available

! Doctor found issues in 1 category.
Process finished with exit code 0

Обновление : я получаю эту ошибку, когда создаю файл APK, но файл создан, и я успешно установил его. Я не знаю, имеет ли эта ошибка какое-либо отношение к моей проблеме

flutter / .pub-cache / hosted / pub.dartlang.org / shared_preferences-0.5.6 + 1 / android / src /main/java/io/flutter/plugins/sharedpreferences/SharedPreferencesPlugin.java:25: warning: [deprecation] getFlutterEngine () в FlutterPluginBinding устарел setupChannel (binding.getFlutterEngine () (getDartExteA) () ));
^ 1 предупреждение
Примечание. Некоторые входные файлы используют или отменяют устаревший API.
Примечание. Перекомпилируйте с -Xlint: устаревание для деталей.

Обновление 2 : я понизил версию shared_preferences до ^ 0.5.3 + 5 и больше не вижу упоминания об ошибке выше при создании приложения, но у меня все еще есть та же проблема.

1 Ответ

0 голосов
/ 30 января 2020

Это не сработало, потому что я не знал, что когда вы впервые создаете файл APK, вам сначала нужно enable, так сказать, inte rnet, чтобы установленный / выпущенный файл APK мог иметь доступ к inte rnet. Поэтому решение было добавить эту строку кода в этот файл - Android / app / src / main / AndroidManifest. xml

<uses-permission android:name="android.permission.INTERNET"/>

Теперь все работает!

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