问题
The below is the COMPLETE code.
The output when I run this below simple kivy code on my laptop is "Hello from Kivy Success". While the output when I run using buildozer android debug deploy run from ubuntu to my mobile is "Hello from Kivy Error". I even added cacert.pem in my project folder, used ca_file=where(),verify=True. That too didn't help.
Why does UrlRequest fail on my mobile? Please help me with a solution.
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()
回答1:
I solved my issue. I had to add python3==3.7.5, hostpython3==3.7.5 in requirements of buildozer specs.
来源:https://stackoverflow.com/questions/64299068/kivy-urlrequest-with-callback-throws-error-on-mobile-but-not-on-laptop-why