React Native Android Fetch failing при подключении к локальному API

Я использую API-интерфейс fetch в своем мобильном приложении для Android, чтобы делать запросы к локальному API. Я обычно обращаюсь к указанному API с помощью веб-приложений, связанных с http: // localhost: 8163 .

Я тестирую свое приложение на своем физическом устройстве в режиме отладчика. Я где-то читал, что response-native не может запрашивать localhost так же, как это может делать веб-приложение. Очевидно, вы должны использовать http://10.0.2.2:[PORT_NUMBER_HERE]/ который является псевдонимом для ` http://127.0.0.1:[PORT_NUMBER_HERE] в соответствии с док-станциями Android-эмулятора. Я не уверен, что это то, что я должен делать для тестирования на физическом устройстве.

Код моей выборки выглядит следующим образом:

 fetchToken() { fetch('http://10.0.2.2:8163/extension/auth', { method: 'GET', headers: { 'Accept': 'application/json', 'Content-type': 'application/json' } }) .then((response)) => console.log('successful fetchToken response: ', response.json())) .catch((error) => console.log('fetchToken error: ', error)) .done(); } 

Запрос всегда зависает некоторое время, а затем достигает блока catch с бесполезной ошибкой TypeError: Network request failed(...) . Проверяя журналы для моего локального API, они вообще не регистрируют запрос.

Поэтому я понятия не имею, правильно ли я запрашиваю свой локальный API, чтобы получить тот ресурс, который я хочу, и если да, то я не знаю, почему сбой неудачен.

Вы не можете получить доступ к локальному серверу разработки, потому что этот порт еще не был отправлен ADB. Когда вы запускаете react-native run-android run react-native run-android , React Native отображает порт 8081 с вашим мобильным устройством на USB-устройстве. Когда вы отключите USB-порт, вы не сможете обновить или снова перезагрузить свой код. Таким образом, в этой ситуации вы можете сделать 2 вещи: либо сопоставьте свой локальный серверный порт так, как React Native, либо используйте свой локальный IP-адрес.

  1. Порт сопоставления

    Это работает, только если вы используете Android 6.0+. Чтобы переадресовать порт с помощью ADB, выполните следующую команду в своем терминале:

     adb reverse tcp:8163 tcp:8163 

    Это отобразит ваш локальный порт 8163 порта 8163 для мобильных устройств. Таким образом, вы сможете получить доступ к серверу разработки.

  2. Использование локального IP-адреса

    Вы также можете использовать свой локальный IP-адрес для приложения React Native для перезагрузки без USB. Встряхните устройство или долго нажмите кнопку меню, чтобы открыть меню разработчика. Откройте Dev Settings , затем нажмите « Debug server host & port for device . Здесь вы можете ввести локальный IP-адрес вашего компьютера с номером порта 8081 . Напр. Если ваш IP-адрес устройства 192.168.1.100 тогда вы должны ввести здесь 192.168.1.100:8081 для успешного соединения. Теперь мы рассмотрели, что мы можем перезагрузить приложение. После этого, когда вы хотите использовать сервер разработки вашего локального компьютера, используйте тот же IP-адрес с номером порта вашего сервера.

Вы должны быть добры, чтобы пойти с этим.

Intereting Posts
Можно равномерно распределить кнопки по ширине андроида linearlayout Безопасность Bluetooth для Bluetooth Как поместить AVD (эмулятор) в режим OFFLINE? CrossWalk XWalkView (альтернатива Webview) не работает с AppBarLayout + CoordinatorLayout Как использовать соединение SQLite из папки Asset OSMdroid – ошибка: не найдено подходящего конструктора для конструктора Overlay (без аргументов) Overlay.Overlay (Context) неприменимо <S3dReadConfigFile: 75>: Не удается открыть файл для чтения Использовать карты Google в автономном режиме в приложении Обнаружение вызова при удержании Исправлена ​​панель нижнего колонтитула – приложение Android Phone5 для Android HTML5? Обезьяна дает нечетную ошибку в эмуляторе Android AsyncTask для обновления виджета – как получить доступ к текстовым изображениям в onPostExecute ()? Как использовать API-адрес речи в приложении? SavedInstanceState всегда имеет значение null Как установить порядок положительных и отрицательных кнопок в AlertDialog?