Kiedy tworzę zupełnie nowy projekt przy użyciu react-native init
(RN wersja 0.29.1) i umieszczam pobieranie w metodzie renderowania do publicznego interfejsu API filmu demonstracyjnego na Facebooku, generuje plik Network Request Failed
. Istnieje bardzo bezużyteczny ślad stosu i nie mogę debugować żądań sieciowych w konsoli Chrome. Oto pobieranie, które wysyłam:
fetch('http://facebook.github.io/react-native/movies.json')
.then((response) => response.json())
.then((responseJson) => {
return responseJson.movies;
})
.catch((error) => {
console.error(error);
});
javascript
react-native
fetch-api
Alek Hurst
źródło
źródło
http
->https
(jeśli to możliwe) najprawdopodobniej rozwiąże twój problem192.168.1.25:3000
ifconfig
rails server --binging=192.168.1.25 --port=3000
Odpowiedzi:
Problem polega na tym, że iOS domyślnie nie zezwala na żądania HTTP, tylko HTTPS. Jeśli chcesz włączyć żądania HTTP, dodaj to do
info.plist
:źródło
Nie zaleca się zezwalania wszystkim domenom na http. Zrób wyjątek tylko dla niezbędnych domen.
Źródło: Konfigurowanie wyjątków zabezpieczeń transportu aplikacji w systemach iOS 9 i OSX 10.11
Dodaj następujące informacje do pliku info.plist swojej aplikacji:
źródło
Używałem
localhost
adresu, co było oczywiście błędne. Po zastąpieniu go adresem IP serwera (w sieci, w której znajduje się emulator) działało idealnie.Edytować
W emulatorze systemu Android adres maszyny deweloperskiej to
10.0.2.2
. Więcej wyjaśnień tutajW przypadku Genymotion adres to
10.0.3.2
. Więcej informacji tutajźródło
http://<Network IP emulator connects to>:<port where API is served>/api/tasks
Dla nas było to spowodowane tym, że ładowaliśmy plik, a RN filePicker nie podał odpowiedniego typu MIME. To tylko dało nam „obraz” jako typ. Musieliśmy zmienić to na „image / jpg”, aby pobieranie działało.
źródło
React Native Docs daje odpowiedź na to pytanie.
React Native Docs -> Integration with Existing Apps -> Test your Integration -> Add App Transport Security
źródło
Problem może dotyczyć konfiguracji serwera.
Android 7.0 ma opisany tutaj błąd . Obejście zaproponowane przez Vicky Chijwani:
źródło
Mam ten sam problem na Androidzie, ale udało mi się znaleźć rozwiązanie. Android blokuje ruch w postaci zwykłego tekstu (żądania inne niż HTTPS) od poziomu API 28 domyślnie. Jednakże, react-native dodaje do wersji debugowania (
android/app/src/debug/res/xml/react_native_config.xml
) parametr network-security-config, który definiuje niektóre domeny (localhost i adresy IP hosta dla AVD / Genymotion), które mogą być używane bez SSL w trybie deweloperskim. Możesz tam dodać swoją domenę, aby zezwalać na żądania HTTP.źródło
Mam ten sam problem w Androidzie 9 z powodu „http” i problem został rozwiązany przez dodanie androida: usesCleartextTraffic = „true” w AndroidManifest.xml
źródło
Natknąłem się na ten sam problem na emulatorze Androida, gdzie próbowałem uzyskać dostęp do zewnętrznego adresu URL HTTPS z ważnym certyfikatem. Ale pobranie tego adresu URL w natywnej wersji reaktywnej nie powiodło się
1) Aby znaleźć dokładny błąd w dziennikach, najpierw włączyłem `` Debuguj JS zdalnie '' za pomocą Cmd + M w aplikacji
2) Zgłoszony błąd to
3) Dodałem ważny certyfikat adresu URL tą metodą -> KROK 2
Ten certyfikat zostanie dodany do karty Użytkownik.
4) Dodaj atrybut
android:networkSecurityConfig
atrybutu do AndroidManifest.xmlDodaj plik konfiguracji zabezpieczeń sieci
res/xml/network_security_config.xml:
To powinno zadziałać i dać oczekiwaną odpowiedź.
źródło
Miałem ten problem na Androida -
URL- localhost / authToken.json - nie działa :(
URL- 10.106.105.103/authToken.json - nie działa :(
URL- http://10.106.105.103/authToken.json - działało :): D
Uwaga - użyj
ifconfig
w systemie Linux lubipconfig
Windows, aby znaleźć adres IpAddress komputeraźródło
Dla użytkownika Androida:
Zamień
localhost
s na adresy IP sieci LAN, ponieważ po uruchomieniu projektu na urządzeniu z systemem Android localhost wskazuje urządzenie z systemem Android, a nie komputer, na przykład: zmieńhttp://localost
nahttp://192.168.1.123
źródło
W przypadku systemu Android mógł brakować dodawania uprawnień w pliku AndroidManifest.xml Należy dodać następujące uprawnienie.
źródło
Mam podobny problem. W moim przypadku żądania do localhost działały i nagle się zatrzymały. Okazało się, że problem polegał na tym, że wyłączyłem wifi na moim telefonie z Androidem.
źródło
To zadziałało dla mnie, Android używa specjalnego typu adresu IP 10.0.2.2, a następnie numeru portu
źródło
jeśli używasz docker dla API REST, sprawa pracy było dla mnie, aby zastąpić nazwę hosta:
http://demo.test/api
z adresem IP urządzenia:http://x.x.x.x/api
. Możesz uzyskać adres IP, sprawdzając, jakie masz IPv4 w swojej sieci bezprzewodowej. Powinieneś także mieć włączone wifi z telefonu.źródło
Powinieneś obsłużyć przypadek błędu w., A następnie pobrać interfejs API.
Na przykład:
źródło
Dodaj
android:usesCleartextTraffic="true"
wiersz w pliku AndroidManifest.xml.Usuń cały folder debugowania z folderu Androida.
źródło
Możesz sobie z tym poradzić, używając tego:
źródło
Po prostu masz zmiany w pobieraniu ...
źródło
W przypadku urządzeń z systemem Android przejdź do folderu głównego projektu i uruchom polecenie:
na przykład,
adb reverse tcp:8088 tcp:8088
Dzięki temu Twoje urządzenie fizyczne (np. Telefon z systemem Android) będzie nasłuchiwało serwera localhost działającego na komputerze deweloperskim (tj. Komputerze) pod adresem http: // localhost: [port_własnego_serwera] .
Następnie możesz bezpośrednio użyć
http:localhost:[your_port] /your_api
w swoim rodzimymfetch(
wywołaniu.źródło
W przypadku Androida dodaj android: networkSecurityConfig = "@ xml / network_security_config" do tagu aplikacji w AndroidManifest.xml, na przykład:
zawartość pliku network_security_config.xml:
źródło
Przykład:
źródło