• úvod
  • témata
  • události
  • tržiště
  • diskuze
  • nástěnka
  • přihlásit
    registrace
    ztracené heslo?
    LWEEKAndroid development
    ROTTWEILER
    ROTTWEILER --- ---
    MRTVY_KENNY: Vůbec tam nepíší, co chtějí dělat a nedokážu si představit jak by to do jejich modelu sedělo. Spíš si taky myslím, co píše PISKVOR.
    PISKVOR
    PISKVOR --- ---
    MRTVY_KENNY: Nebo chystají video "Debilní kecy programátorů" :D Evidentně tam naklikali všechno, jak když pejsek s kočičkou vařili dort.
    MRTVY_KENNY
    MRTVY_KENNY --- ---
    btw nekoho muze zaujmout
    ViralBrothers hledají PROGRAMÁTORA pro MOBILNÍ APLIKACI. - Webtrh
    http://webtrh.cz/227631-viralbrothers-hledaji-programatora-mobilni-aplikaci
    DATEL
    DATEL --- ---
    Teda programuju spoustu let, v různých jazycích, ale koukám, že Android bude moje noční můra :( Doprkýnka ty procesy si tam dělají co chtějí?! Zkoušel jsem debugovat a přišel jsem na to, že po onPause, kde jsem volal zavření kurzoru a DB se pak někde uvnitř knihoven Androidu volala nějaká persistence seznamu (mimo mé metody) a ty si tam zavolala cursor a zjištění položky. Řekl jsem si, hurá, to je ten problém. Zkusil jsem tedy přesunout to zavírání až do onDestroyView, spustím aplikaci, vložím snad 20 záznamů a v pohodě, žádná chyba. Pak najednou otevřu zase formulář pro přidání záznamu, v něm dialog pro výběr datumu - a zas ta chyba "close() was never explicitly called on database...", přitom v před tímto hlášení mám debug hlášky, že to tam tím zavírám prošlo. Tak koukám pořádně do toho trace výpisu výjimky, kudy to jako šlo, a co nevidím, TachoListFragment.onContextItemSelected(), pak MainActivity.onTachoItemUpdateClicked(), TachoModel.getRecord()... WTF?!?! Proč spouštěl tohle proboha? Vůbec jsem v této chvíli nebyl na seznamu, ani jsem nevyvolal kontextové menu, natož abych spustil editaci vybrané položky. Editaci jsem vyvolal v tomhle kole testování pouze jednou, a to dlouho předtím, než mi ta výjimka vypadla, navíc jsem to pak zavřel a pokračoval v přidávání nových položek. Výpis z LogCatu opět přikládám. Buď tam mám někde naprosto nečitelnou chybu, nebo se zbláznil emulátor nebo je Android založen na principu náhodných výbuchů :( Předpokládám, že A je správně, ale kde prohoha?

    DATEL
    DATEL --- ---
    DRIZDIK: tak jsem zkusil přesunout to voání super v onPause na začátek, ale nepomohlo to. Wipnul jsem emulátor, takže aplikace byla čistá. Přidal jsem dva záznamy, v pohodě. Když jsem chtěl přidat třetí, tak se otevřel druhý fragment s formulářem, tam jsem dal vybrat datum, načež se otevřel fragment dialog pro výběr datumu a v té chvíli to vyplivlo zase exception. Ale všiml jsem si, že nejspíš v jiném vlákně než je GUI. Výpis z LogCatu přikládám v příloze.



    DATEL
    DATEL --- ---
    DRIZDIK: ono to neumře, že by to ukončilo aplikaci, ty výjimky to háže pouze do CatLogu, aplikace funguje normálně dál. Zkus vytvoři novou položku, pak třeba rolovat seznamem. Nebo víckrát zadat za sebou novou položku. Většinou to tu chybu do logu hodí.
    Co se týče těch superimplementací, tak ty jsem předtím měl na začátku, ale bylo to nastejno, alespoň co si vybavuju, ještě to zkusím.
    DRIZDIK
    DRIZDIK --- ---
    DATEL: mně se nedaří nasimulovat to umření, ale minimálně bych vždycky v těch metodách volal super implementace před vlastním kódem.
    DATEL
    DATEL --- ---
    Tak ještě k tomu mému problému s uzavíráním kurzoru a databáze, už fakt neví, co s tím. Pokud budete někdo ochotný se kouknout na zdroják, tak je přiložen, budu vděčný na každou pomoc. Je to moje první aplikace, na které se učím, tak se moc neděste (není třeba vůbec doimplementována varianta pro "dualpanel" pro tablety) :)

    Abych to ještě jednou popsal, mám TachoListFragment coby potomka ListFragmentu a to je taky hlavní fragment. V onStart() otevírám DB (model) a dělám update listu, ve kterém si modelem vezmu cursor na seznam, který předám TachoListAdapteru a ten pak nastavím třídě pomocí setListAdapter().

    Pokud pak v aplikaci nechám otevřít dialog pro přidání nové položky (onAddRecordClicked v MainActivity), tak v onPause() TachoListFragmentu zavírám cursor i db. Jenže podle debug záznamů v LogCatu mi to po onStop() vyhodí výjimku

    java.lang.IllegalStateException: attempt to re-open an already-closed object: android.database.sqlite.SQLiteQuery (mSql = SELECT _id, date, daily_counter, main_counter, description FROM records ORDER BY date DESC, _id DESC)

    a netuším proč ani kde, protože v otevíraném AddRecordFragment se s tím cursorem nijak nepracuje.

    Když zakomentuju to uzavření cursoru i db, tak to jede, ale pak to zas háže do LogCatu ty výjimky (ale neshodí aplikaci), že aplikace finalizuje cursor, který nebyl nikdy uzavřen atd. Ne vždycky, ale dost často :(

    Díky za každou pomoc.

    DATEL
    DATEL --- ---
    DRIZDIK: myslel jsi asi onSaveInstanceState(), že? Tu používám v jiném fragmentu. Co se týče toho retaintInstance, tak to nikde nepoužívám, takže nevím, jak je nastaven. Mě spíš zarazilo, že se to v reále chová jinak než jak píšou v ofiko dokumentaci, na tom onStop() by to mělo zkončit a ne jít až do onDestroyView a posléze onCreateView.
    LUKASL
    LUKASL --- ---
    Zdravím, hledám pro svůj rozsáhlý projekt programátora Android.

    1) Jedná se o naprogramování aplikace podobné http://aplikace.o2active.cz/detail.php?id=781#.Ubht5ED0Ekc s mnohem více funkcemi. Pro první verzi by ale stačili základní verze s postupnm rozšířením

    2) Jedná se o aplikaci s prací telefonním seznamem a komunikací API přes URL odkazy
    DRIZDIK
    DRIZDIK --- ---
    MRTVY_KENNY: pokud to neni teba nijak online aktualizovat coz nevidim duvod s tim co pises a pozadavky. Tak si to napis jako kvalitni staticky !responsive! HTML5 a mas hotovou mobilni appku kterou jen protáhneš přes phonegap build službu

    Registrace na AppStore je potřeba počítat s nutností faxování a pokud budeš dělat firemní účet, tak ověřenýho překladu výpisu z živ. rejstříku.
    MRTVY_KENNY
    MRTVY_KENNY --- ---
    VIRTUALVOID: s tim pocitam
    VIRTUALVOID
    VIRTUALVOID --- ---
    MRTVY_KENNY: iphone neporiesis bez nakladov, budes potrebovat 99$/year + zopar stoviek za podpisovy certifikat.
    MRTVY_KENNY
    MRTVY_KENNY --- ---
    VIRTUALVOID: no tim phonegapem resim ten iphone. nemam maca.
    VIRTUALVOID
    VIRTUALVOID --- ---
    MRTVY_KENNY: moja registracka trvala tak tyzden, takze sa zaregistruj cim skor, tym
    lepsie. schvalenie aplikacie + zobrazenie v gp na samotnych devices trva +/- 4 hodiny.

    na phonegap sa vykasli... nativne to urobis rychlejsie (+ ti tu bude vediet vela ludi poradit)
    MRTVY_KENNY
    MRTVY_KENNY --- ---
    zdravim..
    byl by nekdo ochoten mi pomoct radama pri vyvoji prvni mobilni appky (rekneme takovy osobni mentoring, nechcu vsechny zatezovat zacatecnickyma dotazama)?
    jsem se zarek, ze do toho musim vstoupit a nerad bych se vydaval nejakyma slepyma ulickama..
    sehnal jsem si zakazku, ktera je ciste ucici, takze prakticky zadarmo, k tomu ucelu, aby me to dokopalo v danem terminu neco udelat..

    jde o klasickou mobilni appku k malemu festivalu, tzn nejake profily ucinkujicich, mapku se stagema a lineup (tohle je minimum, ktere budu rad, kdyz zvladnu, nejake dalsi ficury bych pridaval az bude tohle hotovo a funkcni a zbyde cas)..

    appka by mela byt nejmin pro android a iphone.

    muze me nejak nakopnout, co k tomu ucelu nejlepe pouzit?
    jsem ve stadiu, kdy bych chtel asi pouzit phonegap (kvuli cross-device) a uz jsem vystoural i nejaky hotovy klikaci lineup, ktery se jenom preskinuje, pripadne doladi, co nebude vyhovoat..

    ale dal nevim vubec co. moje znalosti konci u jedne aplikaci pro jquerymobile, kterou jsem delal, ale ta bezela normalne pres url v browseru, coz ted nechcu.

    nasel jsem si i nejaky predpripraveny phonegap skeleton (hello world), ale ten mi naposled nejak v mobilu padal, pak uz jsem nemel nervy :)

    za kazdou radu budu vdecen, asi potrebuju trosku povodit za rucicku. navic na to neni uplne moc casu..

    ze startu me teda zajima nejmin:
    1/ ten phonegap je ok reseni (neni cas na to to psat zvlast pro iphone a pro android a i rozpocet se blizi nule. a taky bych se chtel naucit "standard" ktery pravdepodobne zuzitkuju i v budoucnu)?
    2/ s jakou prodlevou bych mel pocitat ohledne tech appstoru vcetne develop registraci? aby se nestalo, ze festak probehne a oni to budou nejak validovat a nebude to k dispozici..?
    3/ co dal? mam si udelat staticky "web", ktery strukturou odpovida te appce?

    za jakekoliv rady diky. jak jsem psal na zacatku, tak pokud nekdo bude tak ochotny, ze bych veci mohl resit pravidelne i v prubehu vyvoje, budu radsi, kdyz mi napise do posty, nez vsechny otravovat tady..
    DRIZDIK
    DRIZDIK --- ---
    VIRTUALVOID: DATEL: In memory pracovat často nejde, ale zkus si ještě metodu onSaveState. To jestli se ti fragment zničí nebo ne taky ovlivnuje jestli ho máš nastavenej jako retaintInstance. Tam ti pak zůstane stejná instance včetně instančních proměnnejch při přetáčení a podobných akcích, kdy ti jinak pouze zkusí zachovat state pomocí onSaveState ale instanci vytvoří novou.
    VIRTUALVOID
    VIRTUALVOID --- ---
    DATEL: co sa tyka tej druhej otazky tak s tym ti neporadim. mozno len tak, ze by som si nacital vsetky data in-memory a zmeny robil iba on-demand.
    VIRTUALVOID
    VIRTUALVOID --- ---
    DATEL: ja to robim tak, ze pridam vsetky fragmenty (cez kod, fragmentManager) do kontajneru cez metodu add (plus nejaky ten tag coby stringovy identifikator) a ten ktory chcem aby bol zobrazeny ako prvy dam show. tie ostatne hide.
    vtedy sa to nerecreatuje. chce to teda, ale trochu viac kodu na handlovanie.
    DATEL
    DATEL --- ---
    Díky všem za info. Měl bych další dotaz, respektive nejasnost. V originální dokumentaci o použití fragmentů (http://developer.android.com/training/basics/fragments/fragment-ui.html) je poznámka:

    Note: When you remove or replace a fragment and add the transaction to the back stack, the fragment that is removed is stopped (not destroyed). If the user navigates back to restore the fragment, it restarts. If you do not add the transaction to the back stack, then the fragment is destroyed when removed or replaced.

    Já při výměně fragment dávám do back stacku, ale i přesto když pak vyměňuju fragment, tak se mi na tom původním volá onDestroyView a po "uzavření" nového fragmentu (což je formulář pro novou položku) zavolám getSupportFragmentManager().popBackStack(); a pak se tedy pro původní fragment volá onCreateView atd.

    Další věc, co při konverzi na jednu aktivitu začala zlobit, je uzavírání kurzoru a databáze ve fragmentu pro seznam. Dokud jsem otevíral ten formulář pomocí aktivity, tak to jakžtakž fungovalo (viz. předchozí příspěvky), ale když jsem to předělal, tak mi při vyvolání nového fragmentu (s formulářem) aplikace spadla s výjimkou "attemp to re-open an already-closed object" a týkalo se to právě toho kurzoru. Jenže vůbec netuším, proč. Dal jsem si breakpointu do všech metod a padá to po onStop ve fragmentu se seznamem. To uzavření kurzoru a DB je v onPause. Přitom ten onStop proběhl v pořádku. Do onDestroyView mi debugger už nedošel a snažil se otevírat vnitřní zdrojáky Androidu, které tam nemám. Máte nějaký tip, na co se podívat?
    Kliknutím sem můžete změnit nastavení reklam