web-dev-qa-db-fra.com

Réagissez native fetch () ne fonctionne pas Android

J'essaie d'appeler la fonction fetch().

Cela fonctionne bien sur iOS mais ne fonctionne pas sur 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))
})

Sur iOS, il entre .then() mais sur Android, il entre .catch() et err est {}.

Il ne fonctionne pas non plus sur Emulator et sur le périphérique réel.

Toute aide est appréciée. ^ _ ^

Journal des erreurs avec Axios

Quand j'ai utilisé fetch(), il entre .catch() avec {}.

J'ai essayé avec Axios comme ci-dessous.

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)
    })

Et cela retourne une erreur comme ci-dessous.

{ [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

Le second journal pointe votre erreur. Le problème est le certificat SSL. Voir ce post pour la solution:

Ancrage de confiance introuvable pour la connexion SSL Android

1
sfratini

Dans trace traceback, vous pouvez voir que Java CertPathValidatorException bloque la demande du réseau et vérifiez ceci réponse sous Android

0
I Am Batman

_ {"I Am Batman"} _ suggère de faire appel à Axios . Axios est beaucoup plus simple et s’avère fonctionner de manière cohérente sur ios/Android au lieu de donner à utiliser ces erreurs bizarres. Voici l'exemple d'une requête POST directement à partir de leur github:

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