web-dev-qa-db-de.com

Reaktiver Native Fetch () funktioniert nicht mit Android

Ich versuche, fetch() function aufzurufen.

Es funktioniert gut unter iOS, aber nicht unter Android.

fetch('https://admin.leanpoint.com/Api/User/[email protected]', { 
  method: 'POST', 
  headers: {
    'Authorization': 'Basic c3JpbnVAbWFpbnBvaW50LmRrOnNhaWJhYmE='
  },
})
.then((res) => {
  res.json().then((json) => {
    alert(JSON.stringify(json))
  })
})
.catch((err) => {
  alert(JSON.stringify(err))
})

Bei iOS wird .then() eingegeben, bei Android jedoch .catch() und err ist {}.

Es funktioniert auch nicht auf Emulator und echtem Gerät.

Jede Hilfe wird geschätzt. ^ _ ^

Fehlerprotokoll mit Axios

Wenn ich fetch() verwendet habe, wird .catch() mit {} eingegeben.

Ich habe es mit Axios wie unten versucht.

axios.post('https://admin.leanpoint.com/Api/User/[email protected]', null, {
      headers: {
        'Authorization': 'Basic c3JpbnVAbWFpbnBvaW50LmRrOnNhaWJhYmE='
      },
      timeout: 2000
    })
    .then((res) => {
      console.log(res.data)
    })
    .catch((err) => {
      console.log(err)
    })

Und es gibt Fehler wie unten.

{ [Error: Network Error]
  config:
   { adapter: [Function: xhrAdapter],
     transformRequest: { '0': [Function: transformRequest] },
     transformResponse: { '0': [Function: transformResponse] },
     timeout: 2000,
     xsrfCookieName: 'XSRF-TOKEN',
     xsrfHeaderName: 'X-XSRF-TOKEN',
     maxContentLength: -1,
     validateStatus: [Function: validateStatus],
     headers:
      { Accept: 'application/json, text/plain, */*',
        'Content-Type': 'application/x-www-form-urlencoded',
        Authorization: 'Basic c3JpbnVAbWFpbnBvaW50LmRrOnNhaWJhYmE=' },
     method: 'post',
     url: 'https://admin.leanpoint.com/Api/User/[email protected]',
     data: null },
  request:
   { UNSENT: 0,
     OPENED: 1,
     HEADERS_RECEIVED: 2,
     LOADING: 3,
     DONE: 4,
     readyState: 4,
     status: 0,
     timeout: 2000,
     withCredentials: true,
     upload: {},
     _aborted: false,
     _hasError: true,
     _method: 'POST',
     _response: 'Java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.',
     _url: 'https://admin.leanpoint.com/Api/User/[email protected]',
     _timedOut: false,
     _trackingName: 'unknown',
     _incrementalEvents: false,
     responseHeaders: undefined,
     _requestId: null,
     _cachedResponse: undefined,
     _headers:
      { accept: 'application/json, text/plain, */*',
        'content-type': 'application/x-www-form-urlencoded',
        authorization: 'Basic c3JpbnVAbWFpbnBvaW50LmRrOnNhaWJhYmE=' },
     _responseType: '',
     _sent: true,
     _lowerCaseResponseHeaders: {},
     _subscriptions: [] },
  response: undefined }
7
blackdeve

Ich habe dieses Problem mit der folgenden Lösung gelöst.

Von Android 9(Pie) müssen wir networkSecurityConfig in AndroidManifast einstellen. xml

<?xml version="1.0" encoding="utf-8"?>
<manifest ... >
    <application Android:networkSecurityConfig="@xml/network_security_config">

    </application>
</manifest>

Erstellen Sie nun eine neue XML-Ressourcendatei mit dem Namen network_security_config.xml in value/xml Mappe. Diese Konfiguration gilt für die Basiskonfiguration oder die Standardsicherheitskonfiguration der App und deaktiviert den gesamten Klartextverkehr.

<network-security-config>
  <domain-config cleartextTrafficPermitted="false">
    <domain includeSubdomains="true">172.16.33.1</domain>
  </domain-config>
</network-security-config>

Weitere Informationen finden Sie unter den folgenden Links

https://codelabs.developers.google.com/codelabs/Android-network-security-config/#

https://developer.Android.com/training/articles/security-config

https://medium.com/@son.rommer/fix-cleartext-traffic-error-in-Android-9-pie-2f4e9e2235e6

1

Das zweite Protokoll zeigt auf Ihren Fehler. Das Problem ist das SSL-Zertifikat. Siehe diesen Beitrag für die Lösung:

Vertrauensanker für Android-SSL-Verbindung nicht gefunden

1
sfratini

dank @mohsenomidi tritt dieser Fehler aufgrund einer http-Anfrage auf. Fügen Sie diese Zeile zu Android:usesCleartextTraffic="true" Bis <application/> In Ihrer AndroidManifest.xml hinzu

<manifest xmlns:tools="http://schemas.Android.com/tools"> .... 
    <application 
        Android:usesCleartextTraffic="true" > ... 
    </application> 
</manifest>

https://github.com/facebook/react-native/issues/24627#issuecomment-492159371

0
Nagibaba

das funktioniert bei mir

<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools">



<application Android:usesCleartextTraffic="true" tools:targetApi="28" />
0
mayuresh patil

Möglicherweise liegt auch ein Internetproblem im Android= Emulator vor, wenn neben dem Symbol für die Internetverbindung ! Angezeigt wird. Dann sollten Sie die DNS-Adresse Ihres Netzwerks in 8.8.8.8 ändern. Sie sollten diese Antwort sehen, um zu wissen, wie: https://stackoverflow.com/a/49332186/6170191

0
Nagibaba

In Ausnahme-Traceback können Sie sehen, dass Java CertPathValidatorException die Netzwerkanforderung blockiert und this answer für Android anspricht

0
I Am Batman

"I Am Batman" machte einen guten Vorschlag zur Verwendung von Axios . Axios ist viel einfacher und arbeitet auf beiden iOS/Android-Geräten konsistent, anstatt diese bizarren Fehler zu verwenden. Hier ist das Beispiel, wie Sie eine POST -Anfrage direkt von ihrem Github aus machen:

    axios.post('/user', {
    firstName: 'Fred',
    lastName: 'Flintstone'
  })
  .then(function (response) {
    console.log(response);
  })
  .catch(function (error) {
    console.log(error);
  });
0
Perniferous