我正在尝试运行UrlRequest,而Kivy似乎不想返回。它会挂起,直到我强制退出该应用程序为止。我可以通过Rested运行相同的查询,并且可以验证URL /标题是否正确。
我是Mac OS的新用户,它是否已被防火墙阻止?我可以检查任何日志吗?
代码
server_headers = {'Authorization': 'Bearer ' + str(self.hass_server_token), 'content-type': 'application/json'}
request = UrlRequest(str(self.hass_server_url) + ':' + str(self.hass_server_port) + '/api/states', req_headers= server_headers, verify=False)
while not request.is_finished:
Clock.tick()
self.hass_all_states = request.result
谢谢
答案 0 :(得分:1)
Kivy的UrlRequest
在默认情况下是穿线的。这意味着您需要为请求成功完成时指定一个回调函数。它在后台运行,因此它不会阻止您的应用程序正在执行的其他任何操作,这就是为什么您必须在UrlRequest
调用中指定回调函数的原因,因此它知道完成后该怎么做。为此,请将回调函数的名称传递给on_success
中的UrlRequest
参数。类似地,您可以为on_error
和on_failure
指定回调函数。
示例:
def success_callback(self, *args):
print(args)
随后在您的代码中:
UrlRequest('some_server_url', on_success=self.success_callback)
(您不需要像以前那样向UrlRequest
分配变量)。