React Native IOS App 在没有网络连接时崩溃

Posted

技术标签:

【中文标题】React Native IOS App 在没有网络连接时崩溃【英文标题】:React Native IOS App crashes when no network conection 【发布时间】:2016-05-20 05:54:27 【问题描述】:

在模拟器上它不会崩溃并警告错误,但在生产中它会在假设发出获取请求后立即崩溃,并且在网络连接恢复之前无法重新打开应用程序(我打开/关闭飞机测试模式)

这是我的代码的 sn-ps

  componentWillMount: function()
    NetInfo.isConnected.addEventListener('change',this.handleConnectivityChange)
    NetInfo.isConnected.fetch().done((data) => 

    this.setState(
      isConnected: data
    )
    console.log('this.state.isConnected: ', this.state.isConnected);
  )
 ,

handleConnectivityChange: function()
  var connected = this.state.isConnected ? false : true
  this.setState(isConnected: connected)
  console.log('this.state.isConnected11: ', this.state.isConnected);
,

....

goToList: function(replace, listview)
  console.log('this.state.isConnected: ', this.props.isConnected);
  if (!this.props.isConnected)
    Alertios.alert('Error', 'Please check your network connectivity')
    this.props.removeFetching()
    return
  
 ....
 fetch(url)
  .then((response) => response.json())
  .then((responseData) => 
 ....
  .catch((error) => 
  StatusBarIOS.setNetworkActivityIndicatorVisible(false)
  AlertIOS.alert('Error', 'Please check your network connectivity')
  this.props.removeFetching()
 )
.done()

【问题讨论】:

【参考方案1】:

我花了很多时间试图找到一种在使用 fetch() 时捕获异常的方法,但我无法让它工作(例如,使用 .catch() 或 try/catch 博客不起作用)。起作用的是将 XMLHttpRequest 与 try/catch 博客一起使用,而不是 fetch()。这是我基于的示例:https://facebook.github.io/react-native/docs/network.html#using-other-networking-libraries

var request = new XMLHttpRequest();
request.onreadystatechange = (e) => 
  if (request.readyState !== 4) 
    return;
  

  if (request.status === 200) 
    console.log('success', request.responseText);
    var responseJson = JSON.parse(request.responseText);
    // *use responseJson here*
   else 
    console.warn('error');
  
;
try 
  request.open('GET', 'https://www.example.org/api/something');
  request.send();
 catch (error) 
  console.error(error);

【讨论】:

以上是关于React Native IOS App 在没有网络连接时崩溃的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iOS 设备上运行React Native App

React native init android,ios和app文件夹丢失

React Native 打开 iOS App Notifications 设置

Expo react-native app with firebase phone authentication在web上工作,在ios模拟器上出错,在Android上崩溃而没有警告

如何使用 React Native App 录制音频和视频(没有 Expo)

react-native解决键盘自适应