Expo - 如何通过 httpLink 在 Android 设备上创建与 GraphQL 的数据库连接

Posted

技术标签:

【中文标题】Expo - 如何通过 httpLink 在 Android 设备上创建与 GraphQL 的数据库连接【英文标题】:Expo - How to create database connection to GraphQL on Android device via httpLink 【发布时间】:2020-11-07 15:41:58 【问题描述】:

我无法让我的应用在我的 android 设备上正常运行。我尝试的是通过apollohttpLinkGraphQL 连接到数据库。

expo web 上它运行良好。正确单击搜索按钮会创建与数据库的连接。

我创建了一个示例来更好地向您展示。

网站:

但是现在在我的 Android 设备上使用 expo android 部署相同的代码,并且该按钮不再起作用,并且在日志中没有显示任何错误。但是当我出于测试目的在按钮上设置alert() 时,它会正确显示警报。所以按钮的功能很好,只是连接数据库失败。我还检查了我设备的日志,但无法以某种方式找到任何错误。

安卓:

这很奇怪,因为这个:

httpLink = createHttpLink(
  ...
)

可以完美搭配以下任何一种:

uri: 'http://192.168.178.24:4000'
uri: 'http://localhost:4000'

所以我的问题是如何解决我的Android 设备的数据库连接问题。我很确定这只是uri 的问题,没有其他问题,因为网络版本运行正常。

也许是最后一个提示,当我在 Android 设备上的常规浏览器中打开 http://192.168.178.24:4000 时,我得到了 GraphQL 后端。所以设备可以访问它。

【问题讨论】:

【参考方案1】:

实际上原因不是uri 或任何连接问题。

首先我测试了当我尝试设置虚拟数据时会发生什么:

const links = [
  
    "id": "ck8vbt27p0031074531nvryg0",
    "url": "www.google.de",
    "description": "search engine",
  
]
this.setState( links )

这是一个不错的选择,因为它可以在我的 Android 设备上运行。

但是使用数据库中的真实数据不起作用。

这就是我从使用async await 切换到以下的原因:

const SearchScreen = () => 
  let [filter] = useState(null);
  const [getLinks,  loading, data ] = useLazyQuery(FEED_SEARCH_QUERY);

  if (loading) return <Text>Loading ...</Text>;

  if (data)
    ...
  

现在它也适用于 Android。所以在 Android 上使用异步等待时会出现一些问题。正如official queries 文档页面使用useLazyQuery 所说,这几乎是特定Apollo 版本的问题。因此,在较新的版本中,如果没有 await,它会更正常地工作。

【讨论】:

以上是关于Expo - 如何通过 httpLink 在 Android 设备上创建与 GraphQL 的数据库连接的主要内容,如果未能解决你的问题,请参考以下文章

expo项目,无法通过扫描二维码将项目加载到iPhone,如何解决?

使用 --- innerHTML = "...<a href='http://...'>HttpLink</a>..." 在 javascript 函数中创

如何通过按下 expo 中的按钮来加载 webview 内容?我必须使用导航吗?

使用HttpLink时客户端的apollo-client reactjs 404(未找到)

如何在 React Native / Expo 中请求权限?

如何在 expo/react-native 应用程序中添加自定义节点模块?