Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

[app inventor] Błąd Property getter zapis id przycisków do zmiennej

Krzysiek1260 29 Aug 2018 02:43 852 4
  • #1
    Krzysiek1260
    Level 7  
    Mam problem z programem w app inventor. Po włączeniu aplikacji w emulatorze pojawia się błąd
    Quote:
    Property getter was expecting a com.google.appinventor.components.runtime.Button component but got a String instead. Note: You will not see another error reported for 5 seconds.
    . Nie mogłem zlokalizować przyczyny w gotowym programie, więc przekopiowałem kilka uproszczonych bloków do nowego projektu i wygląda na to, że to w nich jest przyczyna. Program ma ustawiać zmienną current_kurs i zapisywać do bazy id klikniętych przycisków A1, A2 itd. lub odczytywać ją z bazy. Zamieniłem id przycisków na stringi, ale to nie pomogło. Po klikaniu dalej w przyciski coś działało, bo jak odczytywałem zmienne to zgadzały się nazwy z id przycisków, ale przy pierwszym włączeniu wywala zawsze błąd. Jak to naprawić?[app inventor] Błąd Property getter zapis id przycisków do zmiennej
  • #2
    arnoldziq
    Moderator of Programming
    Błąd wyraźnie mówi o tym, że próbuje kolega odczytać wartość ze zmiennej 'string' a program oczekuje kontrolki 'Button' zamiast tego.
    Chodzi o ten 'szaro-zielony kafelek' "Button.Text of Component", do którego podłączył kolega zmienną tekstową zamiast samego button-a.

    [app inventor] Błąd Property getter zapis id przycisków do zmiennej


    BTW: Ten sam błąd powtórzył kolega 3 razy :/
  • #3
    Krzysiek1260
    Level 7  
    Jak były kontrolki "Button" to też był ten sam błąd. Przywróciłem je teraz i wszystko jest ok dopóki zmienna current_kurs nie przyjmie wartości odczytanej z bazy Tinydb.
    [app inventor] Błąd Property getter zapis id przycisków do zmiennej
    Wygląda na to, że w bazie nie da się przechować obiektu "button", bo po jego odczytaniu z bazy staje się tekstem i przestaje działać jako kontrolka. Żeby to obejść przerobiłem projekt tak, że wszystkie kontrolki "Button" umieściłem w liście inicjowanej na początku programu, a zmienna current_kurs operuje tylko wartościami liczbowymi indexów w liście. Wtedy działa i prawidłowo odczytuje liczby z bazy, więc problem póki co chyba rozwiązany. Chyba, że ktoś ma jakiś lepszy sposób?
  • #4
    arnoldziq
    Moderator of Programming
    Krzysiek1260 wrote:
    Wygląda na to, że w bazie nie da się przechować obiektu "button", bo po jego odczytaniu z bazy staje się tekstem i przestaje działać jako kontrolka. Żeby to obejść przerobiłem projekt tak, że wszystkie kontrolki "Button" umieściłem w liście inicjowanej na początku programu, a zmienna current_kurs operuje tylko wartościami liczbowymi indexów w liście. Wtedy działa i prawidłowo odczytuje liczby z bazy, więc problem póki co chyba rozwiązany. Chyba, że ktoś ma jakiś lepszy sposób?

    A mi się wydaje, ze kolega mocno przekombinował. Przecież to, co kolega chce zapisać, to tak naprawdę sam opis Button-a a nie wszystkie jego właściwości.
    Może gdyby kolega wyjaśnił, co tak naprawdę ten program ma na celu, moglibyśmy ustalić jakąś lepsza metodę.
  • #5
    Krzysiek1260
    Level 7  
    Też sądziłem, że ta kontrolka to tylko odwołanie do nazwy przycisku i można ją normalnie przechowywać jak każdą inną zmienną, ale widocznie nie do końca, chyba że to jakiś bug app inventora.
    Opiszę może w takim razie jak cały program ma działać, bo to co pokazałem to oczywiście tylko wyizolowany wycinek pojedynczej funkcji w celu łatwiejszego debugowania.
    Program ma pomagać ewidencjonować ilość sprzedanych biletów na poszczególne kursy linii turystycznej. Najpierw ustawia się aktualny kurs (przyciskami btnA1, btnA2 itd) i dzień, a następnie na bieżąco wybiera rodzaj sprzedawanego biletu. Wybrany kurs jest przechowywany w zmiennej current_kurs i zapisywany w bazie danych, żeby po wyjściu na chwilę z aplikacji nie trzeba było wszystkiego ustawiać ponownie. Docelowo data i kurs będzie mogła też być ustawiana automatycznie na podstawie aktualnego czasu. Właściwie to już jest ale jeszcze do dopracowania na później. Każdy sprzedany bilet jest zapisywany w bazie, więc w każdej chwili można podejrzeć raport z podsumowaniem ilości sprzedanych biletów i kwoty z podziałem na poszczególne kursy i typy biletów.
    Generalnie wczoraj udało mi się dojść do tego etapu i program już jako tako działa, jeszcze trochę muszę dopracować parę drobiazgów i przetestować, z czym trochę trudno bo nie mam urządzenia z androidem pod ręką. Pewnie kod jest przekombinowany w niektórych miejscach, bo jestem zielony w te klocki (i to dosłownie :D ), a i tak bardziej dla rozrywki i z ciekawości to robię, bo w tym sezonie już aplikacja nie za bardzo się przyda, został tylko jeden weekend. Ale chętnie przyjmę jakieś uwagi i propozycje, by w przyszłym roku móc zrobić lepszą, bardziej uniwersalną wersję.
    [app inventor] Błąd Property getter zapis id przycisków do zmiennejblocksz...png Download (1.09 MB)