我在使Android
设备上的应用正常运行时遇到问题。我尝试的是通过apollo
和httpLink
到GraphQL
到数据库的连接。
在expo web
上,它运行良好。正确单击搜索按钮将创建与数据库的连接。
我创建了一个示例,以更好地向您演示。
网络:
但是现在在我的Android设备上使用expo android
部署相同的代码,并且该按钮不再起作用,并且在日志中未显示任何错误。但是,当我出于测试目的在按钮上设置alert()
时,它将正确显示警报。因此,该按钮的功能很好,只是连接数据库失败。我还检查了设备的日志,但是以某种方式找不到任何错误。
Android:
这很奇怪,因为这个:
httpLink = createHttpLink({
...
})
在以下任何一种情况下都能正常工作:
uri: 'http://192.168.178.24:4000'
uri: 'http://localhost:4000'
所以我的问题是如何用我的Android
设备解决该数据库连接问题。我很确定这只是uri
的问题,而其他版本则无其他问题,因为网络版本正常工作。
也许是最后一个提示,当我在Android设备上的常规浏览器中打开http://192.168.178.24:4000
时,会得到GraphQL
后端。因此设备可以访问它。
答案 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
,则可以更正常地工作。