2017-07-25 157 views
0

我正在構建一個React Native移動應用程序,該應用程序使用當前在localhost:8000上運行的Laravel後端。當進行抓取從Android設備請求到我的服務器,我的應用程序獲取以下錯誤日誌:Android上的React Native Fetch返回網絡請求失敗

enter image description here

我的代碼如下:

export default class App extends Component { 
login() { 
    fetch('http://localhost:8000/api/establishments/get') 
     .then((response) => response.json()) 
     .then((responseJson) => { 
     console.log('success!'); 
     }) 
     .catch((error) => { 
     console.error(error); 
     }); 
    } 

    render() { 
    return (
     <TouchableOpacity activeOpacity={.5} onPress={() => this.login()}> 
     <Text>Sign In</Text> 
     </TouchableOpacity> 
    ); 
    } 
} 

當我複製和粘貼的確切路線在我的瀏覽器中,服務器按預期成功完成響應。我相信這是來自我的應用程序的網絡權限問題?我剛剛在一週前纔開始學習React Native,並希望得到任何幫助。

+0

我也試圖加入愛可信我的陣營原生應用和使用axios.get(...),我得到一個相同的錯誤日誌使用取時一樣,在上面的圖片所示。 – davidzucco

回答

2

我懷疑127.0.0.1或localhost會指向服務器當前正在運行的計算機中的模擬器本身。如果您使用的是Genymotion或計算機的實際IP地址,請嘗試使用10.0.2.2替代127.0.0.1/localhost(如果您使用的是AVD或10.0.3.2)。另外,您還應該確保您的Android應用程序可以使用互聯網。你可以通過在你的AndroidManifest.xml中添加

<uses-permission android:name="android.permission.INTERNET" />

+0

對不起,我沒有指定。我正在使用終端上的'npm start'命令,並將其部署到我的物理設備(Galaxy S8 +)。 – davidzucco

+0

您可以通過手機訪問互聯網嗎?您是否與電腦位於同一網絡? –

+0

是的,我在手機上和我的筆記本電腦在同一個WiFi上。 – davidzucco

1

iOS在模擬器中運行,而Android在模擬器中運行。仿真器模擬真實設備,而仿真器僅仿真設備。 因此,Android上的localhost指向模擬的Android設備,而不是運行服務器的機器。 您應該使用您的計算機的IP地址在您的請求路徑中更改本地主機。

更多細節在:https://github.com/facebook/react-native/issues/10404#issuecomment-267303151

相關問題