Python kivy Urlrequest带回调在手机上抛出错误,但在笔记本电脑上没有,为什么?

Python kivy Urlrequest带回调在手机上抛出错误,但在笔记本电脑上没有,为什么?,python,callback,kivy,buildozer,urlrequest,Python,Callback,Kivy,Buildozer,Urlrequest,下面是完整的代码 当我在笔记本电脑上运行下面这个简单的kivy代码时,输出是“kivy Success的Hello”。当我使用buildozer android debug deploy从ubuntu运行到我的手机时,输出是“Hello from Kivy Error”。我甚至在我的项目文件夹中添加了cacert.pem,使用了ca_file=where(),verify=True。那也没用 为什么UrlRequest在我的手机上失败?请帮我找个解决办法 from kivy.app import

下面是完整的代码

当我在笔记本电脑上运行下面这个简单的kivy代码时,输出是“kivy Success的Hello”。当我使用buildozer android debug deploy从ubuntu运行到我的手机时,输出是“Hello from Kivy Error”。我甚至在我的项目文件夹中添加了cacert.pem,使用了ca_file=where(),verify=True。那也没用

为什么UrlRequest在我的手机上失败?请帮我找个解决办法

from kivy.app import App
from kivy.uix.floatlayout import FloatLayout
from kivy.network.urlrequest import UrlRequest
from kivy.uix.label import Label
from kivy.uix.button import Button
import json

def where():
    f = os.path.dirname(__file__)

    return os.path.join(f, 'cacert.pem')   


class MainScreen(FloatLayout):
    def __init__(self, **kwargs):
        super(MainScreen, self).__init__(**kwargs)
        self.a = None            
        self.test_connection()
        print(" I am in init")

    def on_getCloudEvents_success(self,request,result):
        print("on_getCloudEvents_success called:")
        print("  result="+str(result))
        self.resp = result
        self.SYNC_REQUEST_STAT="Success" # to end the synchronous wait
        self.after_success()
        
        
    def on_getCloudEvents_failure(self,request,result):
        print("on_getCloudEvents_failure called:")
        print("  request was sent to "+str(request.url))
        print("    request body="+str(request.req_body))
        print("    request headers="+str(request.req_headers))
        print("  result="+str(request.result))
        self.SYNC_REQUEST_STAT="Failure" # to end the synchronous wait
        self.after_success()

    def on_getCloudEvents_error(self,request,result):
        print("on_getCloudEvents_error called:")
        print("  request was sent to "+str(request.url))
        print("    request body="+str(request.req_body))
        print("    request headers="+str(request.req_headers))
        print("  result="+str(request.result))        
        self.SYNC_REQUEST_STAT="Error" # to end the synchronous wait
        self.after_success()
            
      
    def after_success(self):
#        button = Button(text='Hello world'+self.a)
#        self.add_widget(button)
        self.a = "heree"
        label = Label(text='Hello from Kivy'+self.SYNC_REQUEST_STAT,
                      size_hint=(.5, .5),
                      pos_hint={'center_x': .5, 'center_y': .5},
                      color = [1.4, 1, 1, 1.8])
    
        self.add_widget(label)
        return self

        
    def test_connection(self):
        
        jdata = {"symbols": {"tickers": ["BITTREX:BTCUSDT"], "query": {"types": []}}, "columns": ["Recommend.Other|15", "Recommend.All|15", "Recommend.MA|15", "RSI|15", "RSI[1]|15", "Stoch.K|15", "Stoch.D|15", "Stoch.K[1]|15", "Stoch.D[1]|15", "CCI20|15", "CCI20[1]|15", "ADX|15", "ADX+DI|15", "ADX-DI|15", "ADX+DI[1]|15", "ADX-DI[1]|15", "AO|15", "AO[1]|15", "Mom|15", "Mom[1]|15", "MACD.macd|15", "MACD.signal|15", "Rec.Stoch.RSI|15", "Stoch.RSI.K|15", "Rec.WR|15", "W.R|15", "Rec.BBPower|15", "BBPower|15", "Rec.UO|15", "UO|15", "close|15", "EMA5|15", "SMA5|15", "EMA10|15", "SMA10|15", "EMA20|15", "SMA20|15", "EMA30|15", "SMA30|15", "EMA50|15", "SMA50|15", "EMA100|15", "SMA100|15", "EMA200|15", "SMA200|15", "Rec.Ichimoku|15", "Ichimoku.BLine|15", "Rec.VWMA|15", "VWMA|15", "Rec.HullMA9|15", "HullMA9|15", "Pivot.M.Classic.S3|15", "Pivot.M.Classic.S2|15", "Pivot.M.Classic.S1|15", "Pivot.M.Classic.Middle|15", "Pivot.M.Classic.R1|15", "Pivot.M.Classic.R2|15", "Pivot.M.Classic.R3|15", "Pivot.M.Fibonacci.S3|15", "Pivot.M.Fibonacci.S2|15", "Pivot.M.Fibonacci.S1|15", "Pivot.M.Fibonacci.Middle|15", "Pivot.M.Fibonacci.R1|15", "Pivot.M.Fibonacci.R2|15", "Pivot.M.Fibonacci.R3|15", "Pivot.M.Camarilla.S3|15", "Pivot.M.Camarilla.S2|15", "Pivot.M.Camarilla.S1|15", "Pivot.M.Camarilla.Middle|15", "Pivot.M.Camarilla.R1|15", "Pivot.M.Camarilla.R2|15", "Pivot.M.Camarilla.R3|15", "Pivot.M.Woodie.S3|15", "Pivot.M.Woodie.S2|15", "Pivot.M.Woodie.S1|15", "Pivot.M.Woodie.Middle|15", "Pivot.M.Woodie.R1|15", "Pivot.M.Woodie.R2|15", "Pivot.M.Woodie.R3|15", "Pivot.M.Demark.S1|15", "Pivot.M.Demark.Middle|15", "Pivot.M.Demark.R1|15"]}
        jdata = json.dumps(jdata).encode('utf-8')    
        print(jdata)
        scan_url = 'https://scanner.tradingview.com/crypto/scan'
        UrlRequest(scan_url, req_body=jdata,                     
            on_success=self.on_getCloudEvents_success,
            on_failure=self.on_getCloudEvents_failure,
            on_error=self.on_getCloudEvents_error)

class App(App):   
        
    def build(self):
        return MainScreen()
        

if __name__ == "__main__":
    App().run()

我解决了我的问题。我不得不在buildozer规范的要求中添加python3==3.7.5,hostpython3==3.7.5。

@aerijman您可能会提供帮助吗?您的
buildozer.spec的
要求是什么?@JohnAnderson在buildozer规范的应用程序要求中,我添加了certifi和openssl。还有权限=互联网。在我使用
UrlRequest
的应用程序中,我的要求包括
openssl、python3、kivy、requests、urllib3
。“我不确定你是否需要所有这些,但你可能需要。”约翰南德森还向问题中添加了logcat。使用kivy.network.urlrequest时是否需要urllib3?我加入了你提到的规格,但它不起作用。另外,只要我删除ca_file=certifi.where(),verify=True,应用程序就会显示“Hello from Kivy Error”,但不会在手机上崩溃。这是什么意思?