Koltin/jetpack compose - kłopot z inicjalizacją zmiennej

0

Mam tak zadeklarowaną zmienną:

var fo = FileWriter("t:/kotlin/mk_Trener_1.txt")

W IntelliJ IDEA jest wszystko ok i cały kod działa, a jak to wstawię do jetpack compose to program się wywala.
Nie sygnalizuje błędu tylko się wykłada po skompilowaniu.
screenshot-20220422170153.png

Wrzucam na wszelki wypadek cały kod który w IntelliJ IDEA działa.

import java.io.FileWriter

fun main(args: Array<String>) {

    print("Write to file text:")
    var str: String= readLine().toString()
    WriteToFile(str)

}

fun WriteToFile(str: String) {
    try {
        var fo = FileWriter("t:/kotlin/mk_Trener_1.txt", true)
        fo.write(str+"\n")
        fo.close()
    }catch (ex:Exception){
        print(ex.message)
    }
}

0

Nie przechodzi też coś takiego:

 var file_path = "t:/kotlin/nowy.txt"
    var file = File(file_path)
    file.writeText("sssss")

Problemem jest ostatnia linia.

Czyżby nie działał zapis do pliku z poziomy jetpack compose ?!

0

Zakładasz majtki przez głowę:

Przerób - w tej kolejności.

https://developer.android.com/codelabs/jetpack-compose-basics?hl=en#0
https://developer.android.com/codelabs/jetpack-compose-layouts?hl=en#0
https://developer.android.com/codelabs/basic-android-kotlin-compose-composables-practice-problems?hl=en#0
https://developer.android.com/codelabs/jetpack-compose-state?hl=en#0

Korzystaj tylko z android studio + kotlin
Poczytaj o retroficie potem

https://developer.android.com/codelabs/kotlin-android-training-room-database?hl=en#0
https://developer.android.com/codelabs/basic-android-kotlin-training-update-data-room?hl=en#0
https://developer.android.com/codelabs/basic-android-kotlin-training-update-data-room?hl=en#0

Potem
https://developer.android.com/codelabs/basic-android-kotlin-training-repository-pattern?hl=en#0

Pobieranie / zapisywanie danych lokalnie w andku to nie takie hop siup, musi obsługiwać ichni sandbox - nie możesz zapytać się o dowolny plik z systemu + musisz dać permissiony. To długi temat jest.
https://developer.android.com/guide/topics/data

https://developer.android.com/training/data-storage
https://developer.android.com/training/data-storage/app-specific

Słowa klucze: How to Use Internal Storage (Save, Load, Delete)
Coś ala - nie przejrzałem całego, nie jest to dokładnie czego szukasz ale i tak warto przerobić to co on mówi żeby mieć cześć wiedzy.

Powodzenia

0

Pobieranie / zapisywanie danych lokalnie w andku to nie takie hop siup,

Już to przerobiłem i "normalnie"działa. Zapisuje do pliku i czytam z niego potem.
Nawet ogarnąłem zapis na ftpa.
Problem mam z połączeniem tych rzeczy z jetpack compose.
Potrzebuję żeby po kliknięciu w Button program zapisał mi pewne dane do pliku txt i wysyłał na serwer ftp.
Teoretycznie proste jak wysikać dziurkę w śniegu :-)

Zakładasz majtki przez głowę:

Tak, to już ustaliliśmy. :-)

Przerób - w tej kolejności.

Bardzo dziękuję za wskazówki i cierpliwość ;-) Część już przerobiłem ale muszę lecieć trochę na skróty :-)

Program wygląda coraz lepiej, choć kod to raczej nie nadaje się do pokazywania, no chyba jedynie jako ciekawostka :-)
https://www.youtube.com/watch?v=WeV34UqhVvc
Z tego co się zorientowałem to ten link na telefonie nie zadziała.

0

Na początku mnie to tylko śmieszyło, ale teraz zaczyna już drażnić. 100% początkujących pokazuje zrzut ekranu że aplikacja przestała działać, co jest bezużyteczne. Tak, zakładasz majtki przez głowę. Wróć do samego początku i przede wszystkim dowiedz się co to debugger i logcat.

Tam poleciał wyjątek, który jak byk na pewno wyświetli się w konsoli i który w 100% natychmiast wyjaśni w czym problem. W ramach ćwiczeń, sprawdź jaki wyjątek poleciał, a gdy już to sprawdzisz to podaj go tu

1

"Już to przerobiłem i "normalnie"działa. Zapisuje do pliku i czytam z niego potem.
Nawet ogarnąłem zapis na ftpa.""

Czy kod o którym piszesz do zapisu i odczytu to ten z Twojej pierwszej wypowiedzi?
"Wrzucam na wszelki wypadek cały kod który w IntelliJ IDEA działa.
...
var fo = FileWriter("t:/kotlin/mk_Trener_1.txt", true)
...
""
?

Jeśli tak to:

  1. Ten kod nie bedzie dzialac na androidzie. Dlaczego?
    "Pobieranie / zapisywanie danych lokalnie w andku to nie takie hop siup, musi obsługiwać ichni sandbox - nie możesz zapytać się o dowolny plik z systemu + musisz dać permissiony. To długi temat jest."
    https://developer.android.com/guide/topics/data
    https://developer.android.com/training/data-storage
    https://developer.android.com/training/data-storage/app-specific
    Słowa klucze: How to Use Internal Storage (Save, Load, Delete)

  2. [...] cały kod który w IntelliJ IDEA działa[...] Korzystaj tylko z android studio + kotlin

  3. Zapis na ftp da może radę zrobić przy pomocy: Poczytaj o retroficie potem

  4. Kod logiki biznesowej nie powinien być w compose, dodaj viewmodel https://developer.android.com/topic/libraries/architecture/viewmodel i tam rób logike biznesową (nawet bez DI - jako singletony application brrr ważne żebyś zaczął robić w dobrych warstwach)

Jak chcesz pisać w androidzie proponuję realizowanie kursu dla androida a nie kotlina.

0

Pobieranie / zapisywanie danych lokalnie w andku to nie takie hop siup,

Chyba do mnie to już dotarło.:-) Choć przyznam, ze trochę mnie to dziwi...w sensie tej komplikacji, że w ogóle taka istnieje. Myślałem że podaje się jakąś ścieżkę , nazwę pliku i już.

var fo = FileWriter("t:/kotlin/mk_Trener_1.txt", true)

Z tym kodem to się wyjaśniło, że problem jest właśnie ze ścieżką...bo jak wrzucam to do jetpack compose to jest przecież tak jak ( symulacja) na urządzeniu androidowym i wtedy program nie widzi tej
ścieżki...bo to jest ścieżka na moim kompie. Banał, ale nie wpadło mi to do głowy. Na szczęście są dobrzy ludzie...:-) Dlatego nie sygnalizuje błędu na poziomie kodu tylko się zwyczajnie wywala podczas działania.

@gajusz800 sprawdź jaki wyjątek poleciał,..(przede wszystkim dowiedz się co to debugger)

Pomógł rzeczywiście debuger ...:-) no i tez, jak pisałem wcześniej, dobrzy ludzie.

Zapis na ftp da może radę zrobić przy pomocy: Poczytaj o retroficie potem

Tak pomyślałem ale chyba dla bezpieczeństwa danych chciałbym mieć to i lokalnie i na ftpie...

Kod logiki biznesowej nie powinien być w compose, dodaj viewmodel https://developer.android.com/topic/libraries/architecture/viewmodel i tam rób logike biznesową (nawet bez DI - jako singletony application brrr ważne żebyś zaczął robić w dobrych warstwach)

Tak, już to liznąłem ale jeszcze nie umiem :-)
Wszystko co potrzebuję to dane z tego interfejsu graficznego czyli innymi słowy, to co mam w jetpack compose mi wystarcza.
Są to:

  • nazwa sędziego ( niby to zrobiłem ale nie wiem jak wyświetlić to w ten sposób, żeby pole z podaniem nazwy wyświetliło się pierwsze i nic innego, potem ENTER ( czy jakiś inny sposób na zatwierdzenie) i następnie coś w rodzaju komendy CLS(stare czasy):-) czyli czyszczenie ekranu i dopiero teraz pojawia się cała reszta. Teraz mam cały czas pole "name" które w każdej chwili można
    edytować.
  • wartości które przyjmują suwaki
  • numery zawodników
  • numer pojedynku

To są proste operacje i dlatego próbuję to zrobić jak najprościej, nie czytając od razu całej dokumentacji.:-)
Zdaję sobie sprawę, że kod będzie do przepisania od nowa ale dzięki temu uczę się, robiąc przy okazji coś co już jakoś tam działa
i może zostać w praktyczny sposób wykorzystane.

Jak chcesz pisać w androidzie proponuję realizowanie kursu dla androida a nie kotlina.

To wydaje się dobrą propozycją.

1 użytkowników online, w tym zalogowanych: 0, gości: 1