首页 > 解决方案 > Expo - 如何通过 httpLink 在 Android 设备上创建与 GraphQL 的数据库连接

问题描述

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

expo web它完美地工作。单击搜索按钮正确创建到数据库的连接。

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

网站:

网络

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

安卓:

安卓

这很奇怪,因为这个:

httpLink = createHttpLink({
  ...
})

与这些中的任何一个都可以很好地工作:

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

世博观

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

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

标签: androidreact-nativegraphqlexpo

解决方案


实际上原因不是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 上使用异步等待时会出现一些问题。正如官方查询文档页面useLazyQuery所说,这几乎是特定 Apollo 版本的问题。因此,在较新的版本中,没有await.


推荐阅读