J'utilise l'API de récupération dans mon application Android native pour réagir à une API locale. J'ai l'habitude d'interroger ladite API à partir d'applications web réactives à http: // localhost: 8163 .
Je teste mon application sur mon périphérique physique en mode débogage. J'ai lu quelque part que react-native ne peut pas interroger localhost de la même manière qu'une application Web. Apparemment, vous devez utiliser http://10.0.2.2:[PORT_NUMBER_HERE]/
, qui est un alias pour ` http://127.0.0.1:[PORT_NUMBER_HERE] en fonction des docks de l'émulateur Android. Je ne sais pas si c'est ce que je suis censé faire pour effectuer des tests sur un périphérique physique.
Mon code de récupération ressemble à ceci:
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();
}
La demande est toujours suspendue pendant un certain temps puis atteint le bloc catch
avec l'erreur inutile TypeError: Network request failed(...)
. En vérifiant les journaux pour mon API locale, ils n'enregistrent pas la demande du tout.
Je ne sais donc pas si j'interroge correctement mon API locale pour obtenir la ressource que je veux, et si je le suis, je ne sais pas pourquoi l'extraction échoue.
Vous ne pouvez pas accéder à votre serveur de développement local car ce port n'a pas encore été transféré par ADB. Lorsque vous exécutez react-native run-Android
, React Native mappe le port 8081 avec votre périphérique mobile sur USB. Lorsque vous déconnectez votre clé USB, vous ne pourrez plus actualiser ou recharger à chaud votre code. Donc, dans cette situation, vous pouvez faire deux choses: mapper le port de votre serveur local comme le fait React Native ou utiliser votre adresse IP locale.
Port de cartographie
Cela ne fonctionne que si vous utilisez Android 6.0+. Pour transférer un port à l'aide d'ADB, exécutez la commande suivante dans votre terminal:
adb reverse tcp:8163 tcp:8163
Cela mappera votre port 8163
local sur le port 8163
du mobile. Vous pourrez accéder à votre serveur de développement de cette façon.
Utilisation de l'adresse IP locale
Vous pouvez également utiliser votre application de développement IP native sur React Native pour les recharger sans clé USB. Secouez votre appareil ou appuyez longuement sur le bouton du menu pour ouvrir le menu du développeur. Ouvrez Dev Settings
, puis tapez sur Debug server Host & port for device
. Ici, vous pouvez entrer l'adresse IP locale de votre machine avec le numéro de port 8081
. Par ex. Si l'adresse IP de votre machine est 192.168.1.100
, vous devez saisir 192.168.1.100:8081
ici pour une connexion réussie. Maintenant, nous avons couvert le fait que nous pouvons recharger l'application. Ensuite, lorsque vous souhaitez utiliser le serveur de développement de votre ordinateur local, utilisez la même adresse IP que le numéro de port de votre serveur.
Vous devriez être bon pour aller avec cela.
Avait le même problème/similaire - m'a pris deux jours complets pour le résoudre. J'utilise une machine Win10 avec Visual Studio Code, un périphérique Android connecté et un serveur local PHP pour l'API. Peut-être que cela aidera quelqu'un:
fetch('http://{your IP}:8081/')
.then((response) => response.json())
.then((responseJson) => {
this.setState({ message : responseJson.message.data })
})
.catch((error) => {
console.error(error);
});