【问题标题】:How to make kivy urlrequests work with my android apk made in buildozer如何使 kivy urlrequests 与我在 buildozer 中制作的 android apk 一起工作
【发布时间】:2019-09-26 10:37:31
【问题描述】:

我正在制作一个将使用 kivy UrlRequests 的移动应用程序,在 ubuntu 和 macos 上该应用程序可以工作,但是当我使用 buildozer 制作一个 apk 并通过 android studios 在我的 android(OnePlus 5:android 9.0.8)上运行它时,该应用程序可以工作直到它崩溃的 UrlRquest 部分。

我制作了一个测试 apk,只是为了隔离和测试 UrlRequest,它可以在我的 pc/笔记本电脑和 kivy 启动器上运行,但不能作为 android 上的 apk。

我还有 buildozer.spec 和 logcat 文件,如果您需要,请告诉我

我已尝试将 Buildozer.spec 权限和要求更改为: android.permissions = INTERNET,ACCESS_NETWORK_STATE

requirements = kivy,android,openssl,pyopenssl,httplib2

我也试过把 https 改成 http 还是不行

from kivy.clock              import Clock
from kivy.lang               import Builder
from kivy.network.urlrequest import UrlRequest
from kivy.uix.boxlayout      import BoxLayout


Builder.load_string('''
<DemoLayout>:
  orientation: "vertical"
  padding:     50
  spacing:     50

  Button:
    size_hint: (0.3, 0.3)
    pos_hint:  {"center_x": 0.5}
    text:      "Make Request"
    on_press:  app.make_request()

  Label:
    id: result_label
''')


class DemoLayout(BoxLayout):
  pass


class Demo(App):
  def build(self):
    return DemoLayout()

  def on_request_success(self, request, result):
    self.root.ids.result_label.text = str(result["data"][0]["amount"])

  def make_request(self, *args):
    UrlRequest(
      url         = "https://api.coinbase.com/v2/prices/GBP/spot?",
      on_error    = None,
      on_failure  = None,
      on_progress = None,
      on_redirect = None,
      on_success  = self.on_request_success,
      timeout     = 5,
    )


Demo().run()

当按下“Make Request”按钮时,我希望输出是来自 btc 的值,但实际输出什么都没有

【问题讨论】:

  • 我对 Kivy 和 Buildozer 一无所知,但默认情况下,您无法从 Android 的主线程运行任何 HTTP 代码。这些工具会自动为您解决这个问题吗?如果这是问题所在,您会在 logcat 中看到 NetworkOnMainThreadException
  • 我相信他们确实会自动占用一英亩,因为 logcat 中没有 NetworkOnMainThreadException。
  • 对于 Android API 21 及更高版本,您需要实际请求权限(不仅仅是在buildozer.spec 中列出它们)。看看documentation
  • @JohnAnderson 好的,所以我在 main.py 中添加了 android.permissions import request_permissions, Permission request_permissions([Permission.WRITE_EXTERNAL_STORAGE]) 中的以下内容,但仍然不走运,logcat 一直在输出““访问被拒绝查找属性 sys.thermal.para”

标签: python android android-studio kivy buildozer


【解决方案1】:

我在http://www.jiajianhudong.com/question/3324796.html 找到了解决方案 我更新了我的 buildozer 要求以添加 certfi 并将 ca_file=certifi.where() 参数添加到我的 UrlRequest()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-12
    • 2014-06-27
    • 2021-04-14
    • 2018-06-21
    • 1970-01-01
    • 2021-01-24
    • 1970-01-01
    • 2021-08-02
    相关资源
    最近更新 更多