Praktyczny podstawowy kurs Android – menu, dialog, ikona

Jak pisałem poprzednim razem, stworzyłem kurs programowania na Android, na platformę Udemy. Ten wpis, jest drobnym rozwinięciem tego kursu, o informacje jak tworzyć podstawowe AlertDialog-i, edytować menu i zmienić je w menu składające się z ikon. Kilka wpisów tego typu – czyli wprost o tworzeniu aplikacji na Androida, może się zdarzyć, ale nie będą to jedyne tematy, które będą się pojawiały na tym blogu. Posiadanie kursu nie jest niezbędne, do zrozumienia tego o czym tutaj piszę (będę odnosił się do istniejącego kodu źródłowego), ale dalej zachęcam do kupna, najlepiej z tego kodu: https://www.udemy.com/praktyczny-podstawowy-kurs-programowania-android/?couponCode=BLOG_WPIS w cenie promocyjnej. To tyle tytułem wstępu, zapraszam do artykułu!

Dialog

A właściwie AlertDialog, pod taką nazwą ukrywa się po prostu – wyskakujące okienko. Implementacja w moim przypadku wygląda następująco:

AlertDialog.Builder builder = new AlertDialog.Builder(this);
            builder.setMessage(R.string.dialog_message)
                    .setTitle(R.string.dialog_title)
                    .setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int id) {
                            dialog.dismiss();
                        }
                    });
            AlertDialog dialog = builder.create();
            dialog.show();

Krótko ją omawiając, AlertDialog tworzymy korzystając z wzorca projektowego – builder. Wzorzec ten umożliwia stworzenie obiektu, poprzez ustawianie kolejnych właściwości obiektu, a następnie przez wywołanie metody create (w tym przypadku, metoda ta najczęściej nazywa się build). W ramach właściwości dodaje się też przyciski (positive, neutral, negative), a także interfejs onClick, który jako parametr przyjmuje gotowy obiekt. W naszym przypadku, po kliknięciu ok, ukrywamy okno (metoda dismiss). Po zakończeniu tworzenia obiektu bardzo ważne jest, aby wywołać metodę show. Cały ten blok kodu jest podpięty pod menu kontekstowe (pierwotnie 3 kropki w prawym górnym rogu), które również się zmieniło.

menu dialog

Menu

W trakcie trwania kursu, chyba tylko raz wspomniałem o menu, pora trochę rozbudować te informacje. Menu tworzymy w plikach xml w folderze res/menu. Tam znajdują się domyślnie tworzone „menu per aktywność” (poniższy plik to menu_main.xml), tak wygląda ono obecnie:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context="pl.digitalzombielab.udemyandroid.MainActivity">
    <item
        android:id="@+id/action_info"
        android:orderInCategory="100"
        android:icon="@drawable/ic_info_white_48dp"
        android:title="@string/action_info"
        app:showAsAction="always" />
</menu>

Co mamy tutaj interesującego:

  • orderInCategory – oznacza kolejność w jakiej mają być wyświetlane elementy, od lewej do prawej, lub od góry do dołu w zależności od tego jaki sposób wyświetlania wybraliśmy. Kolejność ta jest rosnąca, czyli najpierw wyświetliło by się 100, następnie 200 (gdybyśmy mieli taki parametr), etc.. Liczby te można oczywiście zamienić na 1, 2, 3…
  • icon – ikona, która została pobrana z tego serwisu, a następnie rozpakowana, można jej używać tak samo jak w aktywnościach (wspominałem o tym w kursie)
  • showAsAction – oznacza w jaki sposób powinien wyświetlać elementy naszego menu, dostępne możliwości to: [„ifRoom” | „never” | „withText” | „always” | „collapseActionView”]. Wybrany przeze „ifRoom” oznacza, wyświetlaj ikonę, kiedy na pasku znajduje się miejsce. Z racji tego, że mamy tylko jedną ikonę, miejsce znajdzie się zawsze, więc ikona zawsze się wyświetli (moglibyśmy użyć „always”). Poprzednio znajdował się tam parametr „never”, który oznaczał – zawsze zwijaj element do menu kontekstowego. Opis pozostałych elementów znajduje się tutaj.

To by było na tyle, jeśli chodzi o te dwa, podstawowe elementy interfejsu. Nie są skomplikowane, ale w kursie nie wspominałem o nich ani słowa, a że finalnie zostały użyte w aplikacji, chciałem coś o nich napisać. Po za tymi elementami w kodzie pojawiły się też minimalne zmiany kosmetyczne, można je podejrzeć w tym commicie. Oraz oczywiście została wydana aktualizacja, do wersji 1.1. Jeszcze raz zachęcam do kupna: https://www.udemy.com/praktyczny-podstawowy-kurs-programowania-android/?couponCode=BLOG_WPIS i liczę na to, że niedługo na stronie z kursem przybędzie opinii. Na blogu też wkrótce pojawi się następny tekst.

Stworzyłem kurs na Udemy – Praktyczny podstawowy kurs Android

Dokładnie 4 miesiące, 2 tygodnie i 2 dni, lub po prostu 140 dni minęło od ostatniego wpisu.. Nie mam pojęcia, jak do tego doszło, chyba po prostu musiałem odpocząć po konkursie DSP..? Nie wiem, miałem też w tym czasie kilka innych projektów, oraz wydałem kurs na Udemy. Ale do tego dojdziemy, na początek: witajcie i zapraszam na wpis po tak długiej nieobecności! 😉

Projekty, projekty

Nie było mnie na blogu, ale po za tym nie próżnowałem (a przynajmniej, nie tak bardzo).. Z tytułu wakacji trochę odpocząłem, wyjechałem. Po powrocie zająłem się projektem, który w tym momencie jest zawieszony, ale była to implementacja aplikacji, która za backend wykorzystała by stworzony przez Michała Szafrańskiego plik budżetu. Frontendem miała być aplikacja Androidowa. Być może kiedyś do niego wrócę, nie wiem, na ten moment niestety musiałem z czegoś zrezygnować. Po za tym przygotowałem prelekcję w ramach wydarzenia Toast, ta nosiła tytuł: „Do more with Android” i w sumie pokazywała kilka przepisów jak zautomatyzowałem część swoich codziennych zadań. Osobiście byłem po niej zadowolony tak na pół (częściowo zjadł mnie stres, częściowo zbyt krótki czas ją przygotowywałem), ale pomimo tego, to po żadnej ze swoich poprzednich prezentacji, nie otrzymałem tyle pozytywnego feedbacku, co po tej. Stała się jeszcze jedna ważna rzecz, mianowicie otwarłem własną firmę. W ramach tej zamierzam trochę dorobić sobie do regularnej pensji (ponieważ dalej regularnie pracuję na etacie), mam kilka pomysłów, może co nie co monetyzacji bloga (dostęp do treści pozostanie darmowy, nie będę też blokował treści osobom korzystającym z adblocków – etc, mam inne pomysły). Prawdopodobnie będę starał się stworzyć i sprzedać własny produkt w Google Play Store. Dlatego całkiem możliwe, że będą się tu pojawiały analizy i moje pomysły jak to zrobić, pewnie nawet z wykresami finansowymi i czasowymi, co kosztowało ile mojego czasu i jak na tym wyszedłem, mam nadzieję, że takie materiały się spodobają. Stworzyłem też swój pierwszy kurs na Udemy…

Udemy

No właśnie, jak do tego doszło? Otóż jakiś czas temu odezwał się do mnie Michał – opiekun Udemy na Polskę. Zaproponował stworzenie kursu z ciekawą premią, o której więcej napiszę w podsumowaniu moich dochodów z Udemy w przyszłym miesiącu.. Zgodziłem się i w około 55 godzin wytężonej pracy nagrałem, zmontowałem i dostarczyłem swój pierwszy kurs na Udemy. Kurs ten nazywa się: „Praktyczny podstawowy kurs programowania na system operacyjny Android„. Trwa ponad 7 godzin, skierowany jest do osób które poznały javę i chcą pójść dalej, lub pracują w backendzie a potrzebują stworzyć prostego klienta Android. Plan kursu przedstawia się następująco:

  1. Informacje o kursie, oraz wprowadzenie do systemu Android
  2. Instalacja oraz konfiguracja Android Studio do działania z emulatorami, oraz urządzeniami fizycznymi
  3. Podstawowe elementy designu: button, editText, textView, checkbox, wprowadzenie praktyczne, oraz wykorzystanie biblioteki butterknife
  4. Obsługa pamięci w systemie Android, shared preferences, przekazywanie danych w intencji pomiędzy aktywnościami
  5. Omówienie layoutów, jak było, jak jest i dlaczego powinniśmy używać „constraint layout”, omówienie sposobu jego działania
  6. Aplikacja lista zakupów – od designu do implementacji, nauka korzystania z list, spinerów oraz adapterów w systemie Android
  7. Aplikacja do rysowania – implementacja, omówienie poszczególnych elementów
  8. Wątki w Androidzie, implementacja metodą AsyncTask
  9. Pobranie kodu źródłowego strony internetowej, oraz korzystanie z API (typu json-rest), automatyczne parsowanie wyników na automatycznie wygenerowany model
  10. Własny widok, oraz wykorzystanie go
  11. Dokończenie, podpisanie, oraz publikacja aplikacji w sklepie Play
  12. Poprawienie publikacji, zmiana pakietu w Android Studio

Nagrałem nawet filmik promocyjny:

I jak? Jeśli Ci się podoba, chcesz podszkolić się z Androida, to.. Przeczytaj jeszcze kilka zdań i kliknij w link 🙂 Kilka dni temu rozpoczęła się dwutygodniowa wyprzedaż, mam więc w związku z tym kilka ciekawych spostrzeżeń, mianowicie: kiedy kurs zostanie kupiony z mojego linka, to otrzymuję 97% od ceny sprzedaży, w innej sytuacji przychód jest o wiele niższy, w zależności od sytuacji. Będę to jeszcze rozgryzał, jak poprawić te wartości, ale tymczasem zapraszam do kupowania z mojego linka: https://www.udemy.com/praktyczny-podstawowy-kurs-programowania-android/?couponCode=BLOG_WPIS. Tutaj jest też kolejna ciekawostka, nie mogę ustawić kuponu poniżej ceny minimalnej 35pln, chyba, że oddam kurs za darmo. W tym miejscu chciałem też podziękować Wiktorowi, za moją pierwszą opinię na jego własnym blogu, nie spodziewałem się tak pozytywnej recenzji. Co do samego kursu jeszcze, to zauważyłem, że pojawili się duzi gracze na tym rynku (np videopoint). Aby być konkurencyjnym ze swojej strony mogę zapewnić, że będę aktywnie pomagał i odpowiadał na pytania, które pojawią się w trakcie kursu, chciałbym, żeby pojawiła się tam cała seria o Androidzie, ale jak będzie, zobaczymy. Być może powstanie tam małe centrum androidowego wsparcia, przekonamy się..

Podsumowując chciałem powiedzieć, że brakowało mi pisania. Bardzo nie chciało mi się zacząć, ale po napisaniu tego posta widzę, że siły wracają. Poprzednia edycja konkursu DSP bardzo mnie zmęczyła, ale już jestem z nowymi pomysłami i postami, które mam nadzieję, będą pojawiały się co poniedziałek rano.

Ps, link do Udemy, gdyby ktoś przeoczył:

https://www.udemy.com/praktyczny-podstawowy-kurs-programowania-android/?couponCode=BLOG_WPIS

Publikacja biblioteki cz. 2 – DSP#21

W poprzedniej części tego wpisu wykonaliśmy sporo operacji w bibliotece, żeby umożliwić jej publikację, konfiguracyjne niemalże wszystko co było wymagane. Na ten moment zostało więc nam przygotowanie reszty, kliknięcie magicznego publikuj, oraz podzielenie się ze światem tym co udało mi się przez te kilka tygodni napisać. Zatem do dzieła!

Finalna konfiguracja

Finalnej konfiguracji niestety nie pokażę 🙂 Chodzi o to, że brakującymi elementami są hasła, użytkownicy, etc, czyli:

  • NEXUS_USERNAME , NEXUS_PASSWORD
  • signing.keyId, signing.password
  • signing.secretKeyRingFile
  • org.gradle.daemon=true

Dopisujemy te parametry w tym pliku. Po dopisaniu (i jeśli zadanie na na jirze zostało oznaczone jako rozwiązane, to istotne) wreszcie można kliknąć wyślij aplikację na serwer. Ale gdzie to kliknąć? Otóż jest to zadanie dla systemu Gradle.

Chodzi oczywiście o zadanie upload archives. Jeśli wszystko przebiegło poprawnie to znajdziemy naszą bibliotekę w tzw „stagingRepos”. Prawdopodobnie na samym dole.

Trzeba tam kliknąć przycisk „close”, poczekać trochę na wykonanie wszystkich operacji. A następnie, finalnie, przycisk „release”. Tutaj znajduje się kompletna dokumentacja do tych operacji. Po kliknięciu release należy poczekać kilka minut i jeśli wszystko przebiegło poprawnie, znajdziemy naszą bibliotekę np w serwisie gradle, please.

To oznacza, że udało mi się spełnić główne założenie konkursu, czyli opublikować bibliotekę. Wymagań względem siebie miałem o wiele więcej, ale i tak uważam to za spory sukces. Na podsumowania przyjdzie jeszcze czas (w następnym, ostatnim wpisie). Ostatnim punktem związanym z publikacjami jest aktualizacja statusu zgłoszenia i oznaczenie go, że biblioteka została już udostępniona w ramach maven central.

Publikacje

Do opublikowania zostało nam kilka rzeczy, między innymi aplikacja demo w klepie Play, aplikacja demo w repozytorium, a także wieńcząca projekt finalna publikacja linku do repozytorium w readme. Do tego oczywiście zgłoszenie biblioteki na stronie android-arsenal. Generujemy więc podpisaną aplikację, wrzucamy są do sklepu w kategorii: „Biblioteki oraz wersje demo”. Swoją drogą sklep Play przeszedł ostatnio mały redesign, doszło sporo nowych funkcji, wszystko jest zdecydowanie ładniejsze oraz bardziej przejrzyste.

No i stało, aplikacja została opublikowana w sklepie Play pod tym adresem, do tego można sobie pobrać to demko bezpośrednio z repo, a także oczywiście zapraszam wszystkich do używania biblioteki:

compile 'com.github.migellal:dayview:0.0.1′

Została również zgłoszona do android-arsenal i aktualnie oczekuje na akceptację.

Update:

Została opublikowana w Android-Arsenal, można ją podejrzeć tutaj.

To tyle, jeśli chodzi o bibliotekę, naprawdę jestem szczęśliwy, że finalnie udało mi się domknąć ten projekt 🙂 Przejście przez wszystkie procedury było złożone i czasem czasochłonne, ale fajnie, że już jest i każdy może z niej skorzystać. Pozostało nam jeszcze małe podsumowanie udziału w konkursie, na które zapraszam już w najbliższy czwartek od 8:00.

Null budget exception – android app

Ostatnio napisałem o tym, że najważniejszą umiejętnością jaką możemy posiąść jest wiedza o tym, jak rozdzielać zadania pomiędzy tym co wykonujemy sami, a tym co powinniśmy oddelegować. Stworzyłem także taką małą aplikację do kształtowania nowych nawyków. Jeśli chodzi o nią, to nie wydałem podczas jej powstawania ani złotówki. Dzisiaj chciałem opisać jak to zrobiłem, aby jedynym moim kosztem był czas. I to najlepiej nie za dużo czasu 😉

Po pierwsze zewnętrzne biblioteki. Kiedy zerkniecie na aplikację, na starcie jest dostępny naprawdę ładny kalendarz. Nie jestem jego autorem, skorzystałem z gotowego komponentu dostępnego tutaj. A tak wygląda zrzut z mojego pliku gradle:

    compile 'com.jakewharton:butterknife:7.0.1′
    compile 'com.prolificinteractive:material-calendarview:1.4.0′
    compile 'petrov.kristiyan.colorpicker:colorpicker-library:1.1.0′
    compile 'com.github.javiersantos:MaterialStyledDialogs:1.4.1′
    compile 'com.github.PhilJay:MPAndroidChart:v2.2.5′

Wszystkie biblioteki których użyłem znalazłem na stronie android-arsenal. Jak już znalazłem wszystko co oszczędzało mi pracę, to po prostu przeczytałem trochę dokumentacji i mogłem korzystać. Bardzo ładnie zintegrowały się z Android Studio, i zostało mi o wiele mniej linii kodu do napisania 😉

Ale aplikacja, to nie tylko kod. Po za tym trzeba by jeszcze dorobić jakąś grafikę. Część grafik była we wcześniej pokazanych bibliotekach. Do ikon na toolbarze użyłem tych dostępnych na stronach design google, z kolei ikona aplikacji pochodziła ze strony flat-icon konkretnie stąd. Tutaj wymogiem było umieszczenie w about informacji o autorze, co też zrobiłem 😉 A z pozostałymi rzeczami graficznymi, np tymi potrzebnymi do sklepu Play poradziłem sobie sam, edytując choćby w paincie te elementy.

Ok, to mamy kodzik, mamy jakąś grafikę. Pozostał filmik promocyjny, który zawsze jest mile widziany. To również udało mi się zrobić, użyłem aplikacji shotcut. Ale skąd wziąłem elementy do tego filmiku? Elementy własnej aplikacji, które tam pokazuję nagrałem sobie sam 😉 Z kolei całe tło składające się z tych różnych biegaczy pobrałem ze stron videezy, oraz videvo, które udostępniają takie fragmenty za darmo 😉 Potem oczywiście odpowiedni montaż, podłączenie muzyki (Dave Depper „Motivational Beat” – „Compositions 2” ze strony freemusicarchive, oczywiście za darmo). I efekt końcowy jest taki:

I jak, wyszło w porządku, czy jednak czuć, że profesjonalista tego nie montował? 😉

Reasumując tak wyglądał mój przepis na w porządku wyglądającą aplikację, która kosztuje trochę czasu, ale za to ani złotówki 😉 Wydaje mi się, że jest on całkiem uniwersalny, także gdyby ktoś chciał tak samo jak ja, to polecam 😉 Można też oczywiście oddelegować część zadań, ważne, żeby ten wybór był świadomy 😉

Pozdrawiam!

Don’t break the chain

Don’t break the chain to technika motywacyjna, w której chodzi o to, że wykonujemy jakąś czynność każdego dnia. Po wykonaniu jej (to może być cokolwiek, bieganie, ćwiczenia fizyczne, granie na instrumencie, nauka frameworka, po prostu cokolwiek). Odznaczamy ten fakt w kalendarzu. Swój przykładowy kalendarz pokazałem tutaj. Ale to nie wszystko, zrobiłem też aplikację: „Nie przerywaj łańcucha” 😉

W aplikacji możemy tworzyć dowolną liczbę łańcuchów, nadawać im kolory, a następnie zaznaczać w kalendarzu, czy udało nam się wykonać daną czynność, czy nie. W momencie w którym mamy już na przykład 5 dni pod rząd, to po prostu, pomimo braku chęci zmuszamy się aby zrobić to po raz szósty. W ten sposób kształtujemy nowe nawyki, potrzeba około 90 dni, aby coś weszło nam w krew 😉

Do tego mamy dostępnych kilka statystyk, które pokazują jak wygląda postęp w danym zadaniu, a także porównują je z innymi zadaniami.
Na koniec mogę jeszcze pokazać filmik reklamowy.
Zapraszam do pobierania ze sklepu Play, nie zapomnijcie zostawić kilku gwiazdek 🙂
https://play.google.com/store/apps/details?id=pl.digitalzombielab.dontbreakthechain
Pozdrawiam!

Week review #1 – ale o co chodzi?

Ostatni wpis w ramach DSP został dodany i jak by posucha nastała 😉 Ale o to już zmierza nowy post o nazwie Week review. O co chodzi? Otóż nie ukrywam, że zainspirował ten filmik, polecam obejrzeć cały, tutaj od konkretnej sekundy.

Próbuję tak od kilku dni i tych notatek w ciągu tego czasu trochę się nazbierało 😉 Ale, żeby nie przeglądać? 😉 Niee, to bez sensu. Trzeba przeglądać, a najlepiej się dzielić tym co udało się zrobić. Bo jeżeli zobowiąże się do dzielenia, a nie będę miał czym….. Nie no, muszę coś robić, bo jak to tak 😉 Chodzi o to, że się zobowiązuję, tak jak zobowiązałem się w konkursie DSP. I to naprawdę dużo dało. Zobowiązanie publiczne, to jednak coś co bardzo motywuje. Dobra nie męczę już tego wstępu, przejdźmy do tego co się działo w tym tygodniu 😉

Jeżeli chodzi o konkurs, to wielu osobom udało się dotrwać do końca, pełna lista tutaj. 70 osób naprawdę robi wrażenie 😉 Od 8 czerwca będzie można głosować na 15 najlepszych blogów, bądźcie uważni 😉 Do tego pojawiły się statystyki, blisko 3000 postów i blisko 7000 commitów. Robi wrażenie 😀 Kompletne statystyki dostępne tutaj.

A co z moim projektem? Ma się dobrze, tzn dzisiaj dodałem zadania związane z odejmowaniem. Nawet mogę pokazać:

Po za tym stworzyliśmy tablicę trello i slacka dla drużyny, mamy konkretne plany na dalszy rozwój 😉 W sklepie Play pojawiła się wersja beta. Noo i jedziemy dalej, możliwe, że pojawi się kilka osobnych wpisów o aplikacji, bądź co bądź 20 wpisów o niej przeczytaliście 😉

Co po za tym? Ano mam ochotę na ketchup 😛 Noo dobra, na konkretny, na Kotlin. Kotlin lang. Bardzo mnie urzekł ostatnio i mam wielką ochotę się go nauczyć. Działa na JVM, a jego autorem są JetBrains, odpowiedzialni za środowisko IntelliJ IDEA. Ma kilka naprawdę fajnych rozwiązań, np null safety na etapie pisania kodu. Także na ten temat również może pojawić się kilka wpisów, postaram się bardzo 😉

Ostatnio pisałem również, że założyłem sobie snapa 😉 Nick to migella, jbc 😉 Ale tak szczerze, to nic jeszcze tam nie opublikowałem. Chcę dodać coś wartościowego, mimo tego, że to zniknie za 24h. Także kombinuję co by tu… 😉

Na ten moment to tyle, mam teraz przed sobą spore zadanie, mianowicie mam rozdać kilka punktów spośród tych 70 blogów 😉 Postaram się to zrobić najuczciwiej jak potrafię, ale to naprawdę spore wyzwanie 😉

Pozdrawiam!

Kurs programowania android, czyli jak wzorowo się podłożyłem ;)

W swoim poprzednim poście informowałem o kursie programowania na platformę Android, który zrobiłem, dzisiaj niestety muszę napisać, że znajdował się w nim spory błąd. Wykorzystajmy to jednak, aby nauczyć się czegoś nowego 😉 Przejdę od razu do rozwiązania, w metodzie która ustawiała kolor paska na dole użyłem metody getColor() co było błędem. Metoda ta została zaimplementowana dopiero w Androidzie 6.0, z kolei do góry znajdował się warunek, jeśli wersja systemu jest większa niż 5.0. W związku z tym wszystkie lizaki miały problem z uruchomieniem aplikacji. Pierwszym rozwiązaniem o którym pomyślałem było zwiększenie warunku, jeśli wersja systemu M lub wyżej, to ustawiaj kolor paska. Ale było to jednak bez sensu, ponieważ kolor paska możemy ustawiać już w 5.0, w związku z skorzystałem z wycofanej metody: (this.getResources().getColor(R.color.colorPrimaryDark) która działa na wszystkich wersjach systemu 😉 Korzystając z okazji, że i tak dłubię w kodzie dodałem jeszcze adnotację: @TargetApi(23) metodom które podświetlały się na czerwono. One i tak były wywoływane tylko w sytuacji kiedy korzystaliśmy z Androida Marshmallow, ale w ten sposób IDE nie informuje nas, że może wystąpić w tamtym miejscu błąd.
A teraz pokażę jak doszedłem do rozwiązania tego problemu. W tym miejscu wypada podziękować użytkownikowi: „Jem ciastka”, który napisał taką opinię:

Swoją drogą, całkiem sporo możemy się dowiedzieć o użytkownikach, którzy pobrali naszą aplikację. Na początku nie bardzo uwierzyłem w to co się stało, dopóki nie zajrzałem do sekcji błędów…
Prawda, że przyjemna sekcja? 😉 Wydedukowałem o co chodzi, poprawiłem, przetestowałem na emulatorze i opublikowałem poprawkę. Cóż, popełniłem głupi błąd, za który wypada mi przeprosić. Dobrze, że instalacji jest póki co mało, dzięki temu mało osób ucierpiało. Wrzuciłem zmianę na githuba i aktualizuję aplikację w sklepie Play.
Na koniec wypada mi jeszcze napisać, cóż, błędy się zdarzają 😉 Nie warto się z tego powodu załamywać, trzeba jednak starać się za każdym razem jak najlepiej je poprawić. Nie mniej, mam nadzieję, że to jedyna poważna wtopa w tym kursie 😉
Pozdrawiam!

Kontrola biletów Wrocław

Mieszkańcy Wrocławia! Tak właściwie, to dla Was jest skierowany ten wpis. Chciałbym mianowicie podzielić się swoim ostatnim dziełem jakim jest aplikacja „Kontrola biletów Wrocław”. Aplikacja nie jest szczególnie rozbudowana, ale wydaje mi się, że przydatna. Pobiera ze strony wroclaw.pl dane o aktualnych kontrolach MPK i prezentuje je w ładnej formie. Myślę, że każdemu taka informacja może się przydać 😉 Oto jak działa:
A tutaj link skąd można ją pobrać
Mam nadzieję, że się przyda, ja na pewno będę z niej korzystał 😉
Pozdrawiam!