Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Jan Balák
Člen
Avatar
Jan Balák:20.1.2019 15:30

Ahoj, začínám programovat v Kotlinu pro Android. Jsem spíš webař a tak se do problematiky zatím dostávám.
Mám v plánu vytvořit několik aplikací, které budou zpracovávat data buď v JSON a nebo v CSV.
Jedna aplikace bude mít méně proměnlivá data, takže si je budu tahat v JSON a ukládat do databáze a při aktualizaci přemazávat.
Co ale s daty, které se budou měnit častěji? Jaký je nejlepší způsob?

  • uložit JSON v zařízení a zobrazovat je takto lokálně a při aktualizaci jen znovu stáhnout JSON?
  • tahat je do zařízení a uložit do DB a přemazávat?
  • tahat data přímo bez meziuložení?

Jde mi o to, aby nějak byla data zobrazitelná i mimo netové připojení.
DB volím jen z toho důvodu, že se dá dobře na data dotazovat. Jde to i elegantněji? Díky za nakopnutí.

 
Odpovědět
20.1.2019 15:30
Avatar
Samuel Kodytek
Tvůrce
Avatar
Samuel Kodytek:20.1.2019 16:09

Ahoj,

Já osobně bych volil 3. způsob, kde si vždy stáhneš data ze serveru a uložíš si je do nějakého místního uložiště (doporučuji se kouknout realm).

Při dotazování serveru, bych si vždy vyclearoval "db", vytvořil nové objekty (podle toho jsonu) a následně je uložil do "db" pomocí realmu. Kdyby náhodou, se zařízení nedokázalo dotázat na server tak v catchi nebo v nějakém callbacku (zaleží co používáš za knihovnu na http requesty) jen vyplníš tvoji activitu pomocí těch objektů, které sis v minulosti uložil do realmu.

Přesto že mi příjde ten to postup nehlehčí má 2 problemy...

  • 1. - Co se má stát když klient nebude připojený k internetu a nebude mít nic uložené v db?
  • 2. - Kdyby jsi měl víc aktivních uživatelů tak ti můžou zahltit server...

Na práci s realmem, mám už připravených pár članků, které momentálně dopisuji.

Pokud jsi píšeš i backend sám, doporučuji se kouknout na Firebase.

Nahoru Odpovědět
20.1.2019 16:09
There is more than one way to screw it
Avatar
Jan Balák
Člen
Avatar
Odpovídá na Samuel Kodytek
Jan Balák:20.1.2019 16:33

Díky. Tvoje řešení je teda spíš ta moje druhá odrážka. Uvažoval jsem o SQLite, ale Realm by asi neměl být problém.
K tomu zahlcení, backend mám na webhostingu. Těch dotazů budou max vyšší stovky, to by nemuselo hosting zahltit.
Na Firebase se podívám.

 
Nahoru Odpovědět
20.1.2019 16:33
Avatar
Samuel Kodytek
Tvůrce
Avatar
Odpovídá na Jan Balák
Samuel Kodytek:20.1.2019 16:36

Pokud máš webhosting, tak tě zahlcení asi v takovém množství uživatelů nemusí zajímat :)

Nahoru Odpovědět
20.1.2019 16:36
There is more than one way to screw it
Avatar
Samuel Kodytek
Tvůrce
Avatar
Odpovídá na Jan Balák
Samuel Kodytek:20.1.2019 16:39

Co jsem zapomněl napsat je, že Firebase umí pracovat i offline: https://firebase.google.com/…able-offline

To je proč jsem ti ho vůbec doporučil.

Nahoru Odpovědět
20.1.2019 16:39
There is more than one way to screw it
Avatar
Jan Balák
Člen
Avatar
Odpovídá na Samuel Kodytek
Jan Balák:20.1.2019 16:40

Zrovna se na to dívám. Offline? Takže se to kompiluje přímo s apk?

 
Nahoru Odpovědět
20.1.2019 16:40
Avatar
Samuel Kodytek
Tvůrce
Avatar
Odpovídá na Jan Balák
Samuel Kodytek:20.1.2019 16:48

Teď nevím přesně jak to myslíš, ale ukládá si to si to výsledky dotazů/dotazy někam do mezipaměti a když se zařízení nemůže připojit k serveru, tak pouze vezme ty poslední stažené data a zobrazí je. Další věc co to umí je, že když by uživatel například z telefonu, který není připojený k internetu, poslal například nějaký komentář (nějakou update/write akci) tak si to uloží ten dotaz a pošle ho až bude zase připojený k internetu.

Furt to funguje podobně jak nějakej webhosting s db a apičkem, jen na to máš knihovnu a asi to bude lépe optimalizovaný než klasický webhosting.

Editováno 20.1.2019 16:50
Nahoru Odpovědět
20.1.2019 16:48
There is more than one way to screw it
Avatar
Jan Balák
Člen
Avatar
Odpovídá na Samuel Kodytek
Jan Balák:20.1.2019 16:55

OK, no ty aplikace budou především data tahat, ne ukládat. Takže asi půjdu tím prvním řešením bez Firebase.
Zatím to mám namyšlené tak, že minimálně 2 z aplikací budou využívat na webhostingu parser, který zpracovává webstránku a připravuje JSON. Tam by se to dalo optimalizovat pravidelným spouštěním a ukládáním na hosting a taháním těchto uložených dat.
Druhou možností je parsovat data přímo v aplikaci, ale do toho se mi moc nechce. V PHP jsem totiž mnohem jistější než řešit toto přímo v aplikaci.
Kdybych to zas řešil v aplikaci, nemusím řešit ukládání. Ale ten mezikrok si raději udělám.

 
Nahoru Odpovědět
20.1.2019 16:55
Avatar
Samuel Kodytek
Tvůrce
Avatar
Odpovídá na Jan Balák
Samuel Kodytek:20.1.2019 17:02

JSON se velmi lehce parsuje zrovna v Kotlinu/Javě pomocí knihovny Gson. Kód vypadá nějak tak to:

Gson gson = new GsonBuilder().create();
Person p = gson.fromJson(reader, Person.class);

Zdroj: http://www.javacreed.com/…son-example/

Editováno 20.1.2019 17:03
Nahoru Odpovědět
20.1.2019 17:02
There is more than one way to screw it
Avatar
Jan Balák
Člen
Avatar
Jan Balák:20.1.2019 17:21

O parsování JSONu vím, teď jsem myslel parsovat data z webu. Tím bych se vyhnul tomu JSONu, ukládání dat atd.

 
Nahoru Odpovědět
20.1.2019 17:21
Avatar
Samuel Kodytek
Tvůrce
Avatar
Odpovídá na Jan Balák
Samuel Kodytek:20.1.2019 17:27

Jak to myslíš "parsovat data z webu"? Že by jsi načetl html a projel to nějakým html selectorem?

Nahoru Odpovědět
20.1.2019 17:27
There is more than one way to screw it
Avatar
Jan Balák
Člen
Avatar
Jan Balák:20.1.2019 17:33

Ano, přesně tak. Teď to stejné dělám na hostingu a výsledkem je JSON. A ten právě chci v aplikaci zpracovávat.
Pokud bych se tomu chtěl vyhnout, asi by to šlo parsovat v Kotlinu přímo v aplikaci. Ale na to si netroufám, aspoň zatím ne.
A od toho vznikl původní dotaz - jak tohle efektivně dělat :-).

 
Nahoru Odpovědět
20.1.2019 17:33
Avatar
Samuel Kodytek
Tvůrce
Avatar
Odpovídá na Jan Balák
Samuel Kodytek:20.1.2019 17:42

Určitě to půjde přes: https://jsoup.org/

Ale příjde mi to jako velmi špatný nápad a zvyk, protože:

  • Velikost dotazu, který klient bude muset stahovat, bude velký (s porovnáním jsonu)
  • Nedá se vyloučit, že někdy v budoucnu budeš chtít změnit i html strukturu aplikace, co budeš dělat pak?
  • V php máš docela lehký způsob jak parsovat objekty do jsonu, bez nějaké externí knihovny.

Konec konců, myslím, že bude určitě i víc důvodů proč většina aplikací pracuje s jsonem a ne s html.

Nahoru Odpovědět
20.1.2019 17:42
There is more than one way to screw it
Avatar
Jan Balák
Člen
Avatar
Jan Balák:20.1.2019 18:02

Jo, já to nerozporuju. Jen jsem chtěl nastínit, proč a co vlastně řeším. A protože začínám, tak neznám optimální řešení :-).

 
Nahoru Odpovědět
20.1.2019 18:02
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 14 zpráv z 14.