kivy Urlrequest with callback throws error on mobile, but not on laptop, why?

538 views Asked by At

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

There are 1 answers

0
Preeti On

I solved my issue. I had to add python3==3.7.5, hostpython3==3.7.5 in requirements of buildozer specs.