Skocz do zawartości
piotrpo

Jak zacząć programować na androida - temat dla początkujących

    Rekomendowane odpowiedzi

    Cześć , to mój pierwszy post na tym forum dlatego proszę o wyrozumiałość . Jaka jest Waszym zdaniem najlepsza droga do tego , by  stać się programistą ? Według Was najlepiej chodzić na kursy? A może lepiej uczyć się samodzielnie z książek lub na przykład filmików na YouTube? Czy w ogóle jest możliwe , aby nauczyć się programować zupełnie samodzielnie?

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach
    mmaciejow

    @traszju jest możliwość samemu nauczenie się. Sam musisz wybrac i przekonać się co jest dla Ciebie najlepsze, czy video czy tekst. Możesz też te dwie formy mieszac.

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach

    Witam. Ostatnio zacząłem programować w Android Studio. Chciałem zrobić na początek coś takiego:

    - ekran główny, na którym są przyciski, które przenoszą nas na drugą "formę",

    - na tamtej formie mamy jakiś dłuższy tekst (tak aby można było palcem przewijać w dół i np jak skopiuje coś z internetu to żeby się automatycznie oddzieliło na różne wiersze) i mamy tam również przycisk, który przywraca nas na ekran główny.

    Prosiłbym o dokładne wytłumaczenie, ponieważ nie wiem jak co się robi w AS.

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach

    Dzień dobry wszystkim,

     

    Mam pytanie, jestem zielony w temacie i byłbym wdzięczny za klika informacji na temat tego, czym mam to zrobić, mniej więcej w jaki sposób. Dużo rzeczy wyszukam sobie sam, jednak chciałbym aby mnie ktoś odpowiednio nakierował :)

    Potrzebuje aplikacji na Android, która aparatem będzie czytać kod QR,, prowadzić bazę danych, odczytywać z niej dane oraz je usuwać.

    Schemat wyglądałby tak:

    Na starcie opcje do wyboru:

    1) [szukaj palety] po wyszukaniu numeru palety pokazuje mi jej lokalizację, mogę ją usunąć, lub przenieść: a) numer alejki, b) miejsce w alejce X c) miejsce w alejce Y [w przypadku regału]

    2) [zapisz paletę] po skanowaniu podaję: a) numer alejki, b) miejsce w alejce X c) miejsce w alejce Y [w przypadku regału] i idzie ona do bazy danych, w której mogę ją potem wyszukać.

    Baza danych byłaby zapisywana w pliku na serwerze dostępnym przez WIFI.

     

    Z tego co wiem do tej pory, muszę wykupić 'bibliotekę' czy coś w ten deseń, tworzenia kodów QR. to akurat nie problem. Kod QR generowałby mi numer palety, i różne inne rzeczy.

     

     

     

     

     

     

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach

    polecam kursy na udemy. Ja ostatnio robię Javascript z Jonasem. kursy nie są drogie bo w okolicach 40zł a jest to bardzo merytoryczna wiedza

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach

    Cześć,

    jestem początkującym programistą Androida, wcześniej napisałem kilka małych aplikacji mobilnych w javie w pracy, jednak teraz chciałbym podszkolić się w Kotlinie.

    Założyłem sobie, że w ramach nauki napiszę aplikację typu lista zakupów.
    Zakładam jeden temat, w którym będę opisywał problemy z jakimi się napotkałem licząc na pomoc w ich rozwiązaniu oraz pytania jakie się pojawią w trakcie pisania tej apki.

    Po pierwsze, chciałbym od początku zacząć pisać aplikację wykorzystując jakiś wzorzec.
    Trochę o nich kiedyś czytałem i wybrałem MVP, który dla mnie jest chyba najbardziej intuicyjny a ponadto wykorzystałem go do tych aplikacji, które pisałem w pracy.
    Tutaj chciałbym jednak przedstawić swoją interpretację MVP i od razu prosić was o wskazanie błędów, które popełniałem. Będę miał oczywiście o ten wzorzec sporo pytań w miarę pisania aplikacji.

    I tutaj pojawia się pierwsze pytanie – nie do końca związane bezpośrednio z tą aplikacją. Na jakiej podstawie powinienem wybierać wzorzec (lub jego brak), który wykorzystam w aplikacji?

    A teraz przechodząc już do MVP.
    W poprzednich aplikacjach struktura wyglądała następująco:
    - model
    - presenter
    - view
    - contract
    - helper
    O pakietach model, presenter i view nie będę się rozpisywał bo wiadomo co w nich przechowywałem, w pakiecie contract tworzyłem interfejsy opisujące view i presenter.
    Do każdego zestawu (np. MainView i MainPresenter lub LoginView i LoginPresenter) tworzyłem osobny kontrakt, w którym były dwa interfejsy, jeden dla view, drugi dla presentera. W helperze trzymałem wszystko inne :D.
    Zastanawiając się nad tą aplikacją, zauważyłem, że u niektórych osób, te kontrakty obejmują również modele. Moje pytanie brzmi, które metody powinienem zawierać w interfejsach?
    W mojej opinii będą to tylko te metody, które są wywoływane z innych klas. To znaczy metody prezentera wywoływane w view lub metody view i modelu wywoływane w prezenterze.

    W tej aplikacji chciałbym wykorzystać zarówno bazę SQLite jak i bazę MariaDB postawioną na moim serwerze. Do obsługi SQLite użyję biblioteki Room.
    Moja interpretacja MVP wyglądała do tej pory tak jak opisałem poniżej.
    W view obsługiwałem interakcję z użytkownikiem, to znaczy wywoływałem odpowiednie metody z presentera w zależności od tego co użytkownik zrobił, oraz odświeżałem widok (zmiana tekstu textview, ukrywanie przycisków, zmiana kolorów etc.).
    W presenterze tworzyłem async taski w których wywoływałem funkcje z modelu i dokonywałem bardziej zasobożernych obliczeń oraz wywoływałem funkcję z view, które odpowiednio odświeżały aktywności i fragmenty.
    Model to był w mniejszym lub większym stopniu odpowiednik tabeli z bazy danych.
    Np. dla tabeli ‘naglowki_dokumentow’ model miał pola tj. id, numer, seria oraz rok (które występowały w tabeli w bazie) ale miał również dodatkowe jak np dokument, który składał sie z wartości pól numer, seria i rok oddzielonych ukośnikiem (np. 1401\S\2020).
    W modelu implementowałem również metody, które służyły do komunikacji z api.
    Np. getHeaders(), która pobierała z bazy nagłówki dokumentów i zwracała je jako JSONObject.
    Zwrócony JSONObject odbierałem w async tasku w presenterze i przerabiałem na listę nagłówków.

    Jak już mówiłem, w tej aplikacji oprócz wykorzystania bazy na serwerze, chcę wykorzystać bazę SQLite. Głównie chodzi o to, żeby listę zakupów utworzyć lokalnie w aplikacji i zapisać do SQLite a w momencie jak urzadzenie nawiąże połączenie z siecią, to wysłać ją do bazy na serwerze.
    W jaki sposób to rozwiązać? Z tego co wiem, to wykorzystując Room’a, tworzy się klasę (encję), która jest opisem tabeli w bazie. Czy w tym przypadku muszę tworzyć dwa modele, jeden dla SQLite a drugi dla bazy zewnętrznej?

    Jeśli chodzi o logikę biznesową w MVP, to powinna ona być umieszczona w Modelu czy Presenterze? Bo spotkałem się z kilkoma artykułami, które sobie przeczyły. Chyba, że to również jest kwestia interpretacji?

    Liczę na odpowiedzi i podpowiedzi bardziej doświadczonych programistów.
     

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach
    mmaciejow
    Napisano (edytowane)

    @androidAbecedarian

    MVP - ok, ale lepszym rozwiązaniem jest MVVM - to taki MVP z dodatkiem ViewModel. 

    Ja bym zrobił tak:

    View - wiadomo
    Model - klasy związane z bazą danych, api, data class itp
    ViewModel - "łącznik" między widokiem, a repozytorium (znajduje się w Model)

    Do zadań w tle polecam Coroutines, asynctask jest wycofywany z Androida. 

    data class - dla api i encji (room) możesz mieć wspólne, ale muszą być odwzorowane 1:1. Czyli taka sama nazwa kolumny po stronie serwera i bazy danych w aplikacji. Ewentualnie możesz zrobić coś takiego:

    data class Entries (
        @PrimaryKey(autoGenerate = true)
        var _id: Int = 0,
        @SerializedName("id")
        var idEntries: Int,
    }

    @SerializedName - informuje Gson, że ma parsować element "id", ale przypisać do idEntries.

    Tworzysz klasę repozytorium, w której będziesz umieszczał funkcję, która będą pobierac/zapisywać dane. 

    W ViewModel tworzysz funkcje i Livedata, które będą pobierac informacje z repozytorium i przekazywać do LiveData, zaś ona poinformuje widok (View) o zmianach. 

    Więcej informacji możesz uzyskać tutaj:

    https://myenv.net/table-of-contents/ 

    Jeśli masz problem z danym zagadnieniem to zakładasz nowy wątek i go odpowiednio opisujesz. Nie umieszczamy wszystkich informacji w jednym wątku.

    Edytowane przez mmaciejow

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach

    Ok dzięki, będę pamiętał o nowych wątkach na kolejne problemy. Co do MVVM to w androidzie również wykorzystuje się bindowanie jak w WPF? 

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach
    mmaciejow

    @androidAbecedarian nie rozumiem pytania. Co masz na myśli bindowanie? Aplikacje tworzysz w Android Studio. 

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach

    Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

    Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

    Zarejestruj nowe konto

    Załóż nowe konto. To bardzo proste!

    Zarejestruj się

    Zaloguj się

    Posiadasz już konto? Zaloguj się poniżej.

    Zaloguj się

    • Ostatnio przeglądający   0 użytkowników

      Brak zarejestrowanych użytkowników przeglądających tę stronę.

    x