android - Expo - 如何通过 httpLink 在 Android 设备上创建与 GraphQL 的数据库连接
问题描述
我无法让我的应用在我的Android
设备上正常运行。我尝试的是通过apollo
和httpLink
到数据库的连接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
后端。因此设备能够访问它。
解决方案
实际上原因不是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
.
推荐阅读
- javascript - 是否可以在 HTML 页面中添加指令来阻止或限制 JavaScript?
- java - 为什么 System.out.println(3+(4-3)/2); 在 java 中打印 3 但不是 2 但 System.out.println(4/2) 正确打印 2
- python - 可以考虑在 Python 中用作逻辑值的列表不会转换为 True/False 吗?
- angular - Swagger codgen:如何在 swagger codgen 中添加附加属性
- java - 如何通过 viber/whatsapp 从 java 发送消息
- c++ - C++ 错误:表达式必须具有 Bool 类型
- html - 无法使用 getelementbyid 值搜索并使用 IE 和 VBA 单击搜索
- laravel - Laravel 路由中的斜线
- react-native - React Native 应用程序在关闭模式或操作表后神秘地冻结
- python - 使用 smtp 从 Python 发送电子邮件时如何添加主题和变量?