博览会-如何通过httpLink

时间:2020-07-17 19:30:44

标签: android react-native graphql expo

我在使Android设备上的应用正常运行时遇到问题。我尝试的是通过apollohttpLinkGraphQL到数据库的连接。

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

我创建了一个示例,以更好地向您演示。

网络:

web

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

Android:

android

这很奇怪,因为这个:

httpLink = createHttpLink({
  ...
})

在以下任何一种情况下都能正常工作:

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

expo view

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

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

1 个答案:

答案 0 :(得分:0)

实际上,原因不是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上存在一些问题。正如https://persistence.blazebit.com/documentation/core/manual/en_US/index.html#pagination文档页面告诉您使用useLazyQuery一样,这几乎是特定Apollo版本的问题。因此,在较新的版本中,如果没有await,则可以更正常地工作。