Why am i getting black screen on kivy app

24 Views Asked by At

I am having a trouble with kivy app. It works on PC properly but gives black screen on android after compiling with buildozer and launch .apk. Thanks for advance

import kivy
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.gridlayout import GridLayout
from kivy.uix.label import Label
from kivy.uix.scrollview import ScrollView
from kivy.core.window import Window
from kivy.clock import Clock
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.uix.button import Button
from kivy.uix.checkbox import CheckBox
from kivy.uix.textinput import TextInput
from kivy.core.audio import SoundLoader
from kivy.utils import platform
import yfinance as yf
import numpy
from datetime import datetime
import json
import os




def HisseGecmisiniCek(hisseadi, interval):
    while(1):
        try:
            data= yf.Ticker(hisseadi)
        except:
            continue
        if(interval=="5m"):
            aralik="30d"
        try:
            data_return = data.history(period=aralik, interval=interval)
            if(len(data_return)!=0):
                return(data_return)
            else:
                continue
        except:
            continue
    
def TrailingStopSmaSinyal(atr_carpan, atr_day, sma_day, hisse_gecmisi, aralik, hisse_adi):
                                     XXXXXXXXXXXXX
    return [len(hissegecmisi)-pozisyona_girilen_mum-2, pozisyon], giris_fiyati, hissegecmisi[-2][3]

def unique_2d_array(arr):
     ..........
def save_settings(settings):
    with open('settings.json', 'w') as file:
        json.dump(settings, file)

def load_settings():
    try:
        with open('settings.json', 'r') as file:
            data = json.load(file)

        # Okunan verileri değişkenlere atama
        checkboxed_index = data.get("checkboxed_index", [])
        max_pozisyon_sayisi = data.get("max_pozisyon_sayisi", [0])
        strateji_array = data.get("strateji_array", [['XXXX', 'XXXX', 'XXXXX', XXXX, '']])
        return checkboxed_index, max_pozisyon_sayisi, strateji_array
    except FileNotFoundError:
        # Dosya bulunamazsa veya okunamazsa varsayılan ayarları döndür
        return [],[0],[['XXXX', 'XXXX', 'XXXX', XXXX, '']]


checkboxed_index, max_pozisyon_sayisi, strateji_array = load_settings()

class SettingsScreen(Screen):
    def __init__(self, **kwargs):
        super(SettingsScreen, self).__init__(**kwargs)
        layout = GridLayout(cols=2)
        scrollview = ScrollView(size_hint=(1, None), size=(Window.width, Window.height))
        scrollview.add_widget(layout)
        self.add_widget(scrollview)
        self.checkboxed_index=[]

        layout.add_widget(Label(text='Max Pozisyon'))
        self.max_pozisyon = TextInput(multiline=False, text=str(max_pozisyon_sayisi[0]))
        layout.add_widget(self.max_pozisyon)


        layout.add_widget(Button(text='Geri Dön', on_press=self.go_back))

    def go_back(self, instance):
        # Ayarlar ekranından ana ekrana dönmek için kullanılacak metod
        self.manager.current = 'main'
        max_pozisyon_sayisi[0] = int(self.max_pozisyon.text)
    


class MainScreen(Screen):
    def __init__(self, **kwargs):
        super(MainScreen, self).__init__(**kwargs)
        self.label_dict = {}
        self.data_history = {}
        self.data_history_list = []
        main_layout = BoxLayout(orientation='vertical')

        scrollview = ScrollView(size_hint=(1, None), size=(Window.width, Window.height*9/10))
        layout = GridLayout(cols=4, size_hint_y=None)  # Tabloda 3 sütun
        layout.height = Window.height/10*(len(strateji_array)+2)

        layout.add_widget(Label(text='Güncelleme\nZamanı'))
        self.guncel_label = Label(text='')
        layout.add_widget(self.guncel_label)
        layout.add_widget(Label(text='Saat'))
        self.saat_label = Label(text='', size_hint_x=None, width=Window.width/10)
        layout.add_widget(self.saat_label)

        layout.add_widget(Label(text='Hisse Adı'))
        layout.add_widget(Label(text='Strateji'))
        layout.add_widget(Label(text='Durum'))
        layout.add_widget(Label(text='Pozisyonda mı?', size_hint_x=None, width=Window.width/10))

        for i in range(len(strateji_array)):
            self.data_history_list.append([strateji_array[i][0],strateji_array[i][1]])
            self.label_dict[str(i)] = [
            Label(text=f'{strateji_array[i][0]} ({strateji_array[i][1]})', color=(1, 1, 1, 1)),
            Label(text=f'{strateji_array[i][2]}\n{strateji_array[i][3]}', color=(1, 1, 1, 1)),
            Label(text=f'{strateji_array[i][4]}', color=(1, 1, 1, 1))
            ]
        self.data_history_list = unique_2d_array(self.data_history_list)
        # Veri satırları
        self.indis = 0
        for i in self.label_dict.values():  # Örnek olarak 5 satır ekliyoruz
            layout.add_widget(i[0])
            layout.add_widget(i[1])
            layout.add_widget(i[2])
            checkbox = CheckBox(active=True if self.indis in checkboxed_index else False, size_hint_x=None, width=Window.width/10)
            layout.add_widget(checkbox)
            checkbox.bind(active=lambda instance, value, index=self.indis: self.checkbox_func(value, index))
            self.indis += 1

        scrollview.add_widget(layout)

        bottom_layout = GridLayout(cols=2, size_hint_y=Window.height/10)
        settings_button = Button(text='Ayarlar', size_hint_y=1, size_hint_x=1)
        settings_button.bind(on_press=self.show_settings)
        bottom_layout.add_widget(settings_button)

        self.button_stop = Button(text='Alarmı Durdur', size_hint=(1, 1), disabled=True)
        self.button_stop.bind(on_press=self.stop_alarm)
        bottom_layout.add_widget(self.button_stop)
        main_layout.add_widget(scrollview)
        main_layout.add_widget(bottom_layout)
        self.add_widget(main_layout)

        Clock.schedule_once(self.PozisyonCheck, 0)

        Clock.schedule_interval(self.update_time, 1) #Arkaplanda çalışması gereken kod

    def show_settings(self, instance):
        # Ayarlar ekranını açmak için kullanılacak metod
        self.manager.current = 'settings'

    def update_time(self, dt):
        tam_saat = datetime.now().strftime('%H:%M:%S')
        self.saat_label.text = tam_saat
        saat = datetime.now().hour
        dakika = datetime.now().minute
        saniye = datetime.now().second
        if (9 <= saat < 19)and(dakika%5==0)and(saniye==10):
            Clock.schedule_once(self.PozisyonCheck, 0)
            self.guncel_label.text = tam_saat
        elif (dakika%5==0)and(saniye==10):
            self.guncel_label.text = 'Piyasa Kapalı'

    def checkbox_func(self, value, indis):
        if value:
            checkboxed_index.append(indis)
        else:
            checkboxed_index.remove(indis)
        checkboxed_index.sort(reverse=True)

    def start_alarm(self, instance=None):
        self.alarm_sound = SoundLoader.load('alarm_sound.mp3')
        if self.alarm_sound:
            self.alarm_sound.play()
            self.button_stop.disabled = False   

    def stop_alarm(self, instance):
        if self.alarm_sound:
            self.alarm_sound.stop()
            self.button_stop.disabled = True

    def PozisyonCheck(self, dt):  # dt parametresi, Clock tarafından otomatik olarak iletilir

        for i in self.data_history_list:
            gecmis = HisseGecmisiniCek(str(i[0])+'.is',i[1])
            self.data_history[i[0]+i[1]] = gecmis.to_numpy()

        for indis, i in enumerate(strateji_array):
            if(i[2]=='TS&SMA'):
                sonuc_array, giris_fiyati, son_fiyat = TrailingStopSmaSinyal(i[3][0], i[3][1], i[3][2], self.data_history[i[0]+i[1]], i[1], i[0]+".is")
                self.label_dict[str(indis)][0].text = f'{strateji_array[indis][0]} ({strateji_array[indis][1]})\n{round(son_fiyat,2)} % {round((son_fiyat*100/giris_fiyati)-100,2)}'
            if not (sonuc_array[-1] in self.label_dict[str(indis)][2].text):
                if(sonuc_array[-1]=='AL')and(int(max_pozisyon_sayisi[0])>len(checkboxed_index)and('SAT' in self.label_dict[str(indis)][2].text)):
                    self.start_alarm()
                elif(sonuc_array[-1]=='SAT')and(indis in checkboxed_index)and('AL' in self.label_dict[str(indis)][2].text):
                    self.start_alarm()
                if (sonuc_array[-1]=="AL"):
                    self.label_dict[str(indis)][0].color = (0, 1, 0, 1)
                    self.label_dict[str(indis)][1].color = (0, 1, 0, 1)
                    self.label_dict[str(indis)][2].color = (0, 1, 0, 1)
                else:
                    self.label_dict[str(indis)][0].color = (1, 0, 0, 1)
                    self.label_dict[str(indis)][1].color = (1, 0, 0, 1)
                    self.label_dict[str(indis)][2].color = (1, 0, 0, 1)
            self.label_dict[str(indis)][2].text = sonuc_array[-1]+f" @ {round(giris_fiyati,2)}"+"\n"+str(sonuc_array[0])+" Mum Önce"
    


class TableApp(App):
    def build(self):
        if platform == "android":
            from android.storage import primary_external_storage_path
            from android.permissions import request_permissions, Permission

            # Request storage access permissions
            request_permissions([
                Permission.WRITE_EXTERNAL_STORAGE,
                Permission.READ_EXTERNAL_STORAGE,
                Permission.INTERNET,
                Permission.READ_MEDIA_AUDIO,
                Permission.READ_MEDIA_IMAGES,
                Permission.MANAGE_EXTERNAL_STORAGE
            ])
        # ScreenManager oluştur
        screen_manager = ScreenManager()

        # Ana ekranı oluştur ve ScreenManager'a ekle
        main_screen = MainScreen(name='main')
        screen_manager.add_widget(main_screen)

        # Ayarlar ekranını oluştur ve ScreenManager'a ekle
        settings_screen = SettingsScreen(name='settings')
        screen_manager.add_widget(settings_screen)
        return screen_manager

    def on_stop(self, *args):
        data = {
            "checkboxed_index": checkboxed_index,
            "max_pozisyon_sayisi": max_pozisyon_sayisi,
            "strateji_array": strateji_array
        }
        with open('settings.json', 'w') as file:
            json.dump(data, file)
        


Window.clearcolor = ((135 / 255), (135 / 255), (135 / 255), 1)

TableApp().run()

Addition First run after launch apk i am getting "Message: 'Error when copying logo directory'" on adb but still black screen. Other runs clear on adb.

0

There are 0 best solutions below