Keresés

Hirdetés

Új hozzászólás Aktív témák

  • thon73

    tag

    válasz eastsider #2162 üzenetére

    Sztem. az s az egy String. Ha egy objektomra vagy kíváncsi egy listában, akkor az egészben keresd! Most épp egy substring-et keresel!
    Sztem. az egészet ráadásul arraylistté is kell alakítani, ahhoz, hogy működjön:
    Arrays.asList(aperture_array).indexOf( aperture ); - feltéve, h. aperture egy string.

  • thon73

    tag

    válasz eastsider #2168 üzenetére

    Bocs, de nem egyszerűbb felrakni újra ez egész csomagot? Ez az "egyetemen beállított, hazavitt" dolog szerintem tartalmaz egy-két buktatót. Az eredeti csomag letöltve/felrakva teljesen üzemkész; (a JavaJDK-t, meg a drivert amúgy sem az kezeli.) Csak úgy kérdezem.

    Bocs eastsider, nem frissítettem,mielőtt válaszoltam, de a lényeg: az jó megoldás amit írsz!

  • thon73

    tag

    válasz eastsider #2174 üzenetére

    Esetleg onCreateView használata onCreateDialog helyett? Bár a színt nem változtattam benne...

  • thon73

    tag

    Van egy static metódusokat tartalmazó osztályom. Ez az osztály néhány belső adatot szintén static osztályváltozókban tárol. Amit a konfigurációs változások és singletonok kapcsán olvastam, kissé elbizonytalnított.

    - A program újraindításakor (konfigurációs változás miatt) vajon megmaradnak-e ezek az adatok(gondolom ez a helyzet), vagy új osztály (új adatokkal keletkezik?) Hogyan lehet kikényszeríteni, hogy az osztály újrainicializálja az adatait?

    - Van-e arra esély, hogy a program újraindítás nélkül (pl. ha csak háttérbe kerül) egyszer csak bezárja ezt az osztályt, aztán újraindítja újrainicializált adatokkal?

    Nekem az kellene, hogy minden indítás üres adatokat eredményezzen, viszont azok a program újraindulásáig megmaradjanak. És a hab a tortán: lehetőleg NE legyen köze az Activity-hez, context-hez. (Uis. egy független részben szerepelnek a metódushívások.) Vajon ez megoldható?

  • thon73

    tag

    válasz Sianis #2203 üzenetére

    Thx. Mindkettőtöknek!

    Shared prefsre én is gondoltam, de eredetileg függetleníteni akartam a context-től. Végül is nem gond; úgy oldottam meg, hogy a könyvtár alapból beállított adatokkal már működik; ha meg változtatni akarok rajta futás közben, akkor ahhoz kell context is.

    Amúgy ha a process eltűnik, akkor az Application is eltűnik, nem? Vagyis mindent újra kell indítani. Vagyis ideális alternatíva lenne globális adatok elhelyezésére (speciel most nekem nem erre kell, csak belső adatok tárolására voltam kíváncsi). Ennek ellenére azt olvastam, hogy nem ajánlott elrendezés, mert nehéz tesztelni...

    És csak a teljesség kedvéért: ha csinálok egy singletont, ami valójában egy példány, csak saját magára való hivatkozást tárol, akkor az hogy létezik, hogy az Activity-vel együtt eltűnik? (És nem az Applicationnel. Vagyis memória kevés, háttérben Activity bezár, Application marad, de a singleton is eltűnik.) Ezt egyébként több helyen olvastam, és már én is tapasztaltam. Annak nem kéne a process végéig megmaradni?? Vagy az önhivatkozás máshogy számítana?? Ennek a kérdésnek ugyan már semmi köze az eredeti problémához, csak érdekel...

  • thon73

    tag

    Bocsánat, hogy a sok magas szintű fejlesztés mellett egy nagyon kezdő kérdéssel állok elő. :B
    A multithread-ek világában próbálok elmélyedni. Tudna valaki egy olyan kódot/linket adni, ahol specifikusan Android-on a happens-before eseményt tudnám tanulmányozni; vagyis amivel el tudom érni, hogy a thread-ek biztosan megkeveredjenek?
    Specifikusan egy olyan ötlet kellene, hogy a thread a saját cache-ében tárolja el a globális változómat, és nemigen tudom, hogyan lehetne ezt kikényszeríteni.
    Nem a helyes megoldásra van szükségem (arról rengeteg okos ötlet van), hanem magát a hibajelenséget szeretném látni.
    Előre is köszönöm! :R

  • thon73

    tag

    válasz vz12 #2370 üzenetére

    Bocs, csak most csatlakoztam bele a történetbe.
    Én ugyanezzel a problémával szembesültem, azzal kiegészítve, hogy nem csak az ékezetek, hanem néhány írásjel átalakítására is szükségem volt. Végül úgy oldottam meg, hogy készítettem egy kb 300 elemű tömböt. Az indexet az unicode kód adta, az elem értéke pedig visszaadta, hogy milyen ékezettelen karakternek kell ezt tekinteni. A tömb mérete felett csak nagyon elvarázsolt karakterek vannak (vagyis az európai nyelvekben nem használatosak), így ott mindig az "ugord át" jelet adta vissza.
    ((Nagyon zárójelben jegyzem meg, hogy ezt továbbgondolva ezzel az egy táblázattal sikerült a lényeges nyelveken rendezni a kifejezéseket, ill. keresni is ékezetlenített módon.))
    Persze ez is csak egy módszer a sok közül, de gyors, tömör és hasznos volt. Nem a végleges változat, de ITT megtaláltam, amit írtam róla korábban.

    A targettel kapcsolatban annyit fűznék hozzá (bár fentebb elhangzott), hogy ebbe a hibába én is beleestem, mert 2.36 alá írtam a programokat, és a régi sdk-val fordítottam.
    Valóban az a követendő, hogy a leges-legújabb sdk legyen fent, és ez szerepeljen a project.properties-ben is. (És amivel szintén voltak hm. gondjaim: a support library-t is illik ezzel együtt frissíteni a projektben). A minimalis és a target (a manifestben) ettől függetlenül bármire beállítható. (Én is többnyire API8/API10 kombóra fordítok, de (((elvileg))) a legutoljára letöltött sdk-val.)

  • thon73

    tag

    Kérdésem:
    A ListView-nál azt írja a tudomány, hogy Loader töltse be a háttérszálon, és Filter szűrje, szintén háttérszálon.
    Ha szeretnék beletenni egy sort-ot (mégpedig úgy, hogy menet közben a sort feltételt a felhasználó megváltoztathassa), akkor azt hova érdemes/kell tenni?

    Ha a Loader-be teszem, akkor az egész lassú betöltést megismétli, amikor csak a sorrendet akarom módosítani.

    Ha a Filterbe teszem, akkor minden szűrés elején egy csomó ideig sorrendbe rak.

    Ha csak az adapterbe teszem, akkor meg nem a háttérszálon történik. ((Ez önmagában nem baj, de lehet, hogy lassúbb, mint a filter))

    Van erre nézve valakinek tapasztalata?
    Készítsek egy külön asynctaskot? (Egyetlen sorért!?) Egy második Filter osztályt, ami rendez és nem szűr? Broadcastal kérjem meg a LOader-t, hogy ne töltsön csak rendezzen? Nekem egyik sem szimpatikus.
    Előre is köszI!

  • thon73

    tag

    Meg tudnátok mondani, hol találok "matrix transformation" témában egyszerű magyarázatot?
    Arra lenne szükségem, hogy egy nagyméretű bitmap-et (lehet a resource-k között) átalakítsak éppen akkorára, mint amekkora a custom View. Mivel az onDraw (egyebek mellett) ezt folyamatosan újra megjeleníti - gondolom - célszerű lenne egy éppen megfelelő méretet tárolni belőle átmenetileg.
    Addig jutottam, hogy ezt a matrix segítségével lehet megtenni, de sem a hogyant, sem a miértet nem értem. :F

  • thon73

    tag

    válasz Karma #2485 üzenetére

    :W Köszönöm! Ez lényegesen egyszerűbb!
    ((Nem tudom, miért nem jutottam erre az oldalra, pedig az utolsó részét olvastam.))

  • thon73

    tag

    válasz thon73 #2486 üzenetére

    Bocsánat, még egy kérdés az optimalizálásról.
    Van egy - mondjuk 1200x800 pixeles képem, amit az onDraw helyez bele a Viewbe így:
    canvas.drawBitmap(skin, null, dst, null);
    (Rect dst értékét az onSizeChanged-ben szedem össze, gyakorlatilag a View mérete, a bitmap dekódolása, közelítő átméretezése meg a konstruktorokban van.)

    Kérdés:
    Mivel rajzolok a bitmap felszínén (egy pont követi az ujjamat), ez a drawBitmap() minden alkalommal lefut. És minden alkalommal ismételten átméretezi a bitmap-et. (Hol 798, hol 356 stb a View mérete, pl. ahogy forgatom a készüléket.)

    Ezt kell-e v. lehet-e optimalizálni? Az inSampleSize segítségével már megközelítőleg ekkora képet csináltam, de nem pontosan ekkorát. Vagy ez nem akkora terhelés? Végül is elég gyorsan fut...

  • thon73

    tag

    válasz thon73 #2487 üzenetére

    Azt hiszem megoldottam, bár lehet, h. nem ez a legoptimálisabb. A grafikában nem vagyok otthon. (A nem ide tartozó részek hiányoznak a kódból.)

    private Bitmap skin;
    private Bitmap skinscaled;

    private void init()
    {
    skin = BitmapFactory.decodeResource(getResources(),
    R.drawable.portrait);
    }

    protected void onSizeChanged (int w, int h, int oldw, int oldh)
    {
    skinscaled = Bitmap.createScaledBitmap( skin, w, h, false);
    }

    protected void onDraw(Canvas canvas)
    {
    canvas.drawBitmap( skinscaled, 0f, 0f, null);
    }

    Egy további kérdés még felmerült bennem: az onDraw-ban megkapott canvas-szal csak az onDraw-ban rajzolhatok (invalidate után mindent újra), vagy máshol is rajzolhatok rá, olyat, amit nem kell letörölni a következő rajz előtt? (Az ujj húzásának az útját mutatja; felemelésig)

  • thon73

    tag

    válasz Karma #2489 üzenetére

    Hm. Ez egy soft-keyboard lesz, a bitmap a layout, vagy nevezhetjük háttérnek is. Az onDraw semmi mást nem tesz, csak kirakja ezt a bitmapet, meg egy karikát ahol a user ujja van. Esetleg nyomvonalat. Nem hiszem, hogy nyernék a worker-threaddel, mert a képet ígyis, úgyis újra ki kellene raknia. Ezért hagytam ezt a megoldást. Mindenesetre elég jól megy, de lehet h. még lehetne optimalizálni...

  • thon73

    tag

    válasz Karma #2491 üzenetére

    :K Pontosan. Miután kicsontoztam a softkeyboard példaprogramot, már nem is volt annyira bonyolult, mint amennyire tartottam tőle! A lényegi részek megvannak, remélem a többivel sem akadok el. Még kell rajta filozofálni egy kicsit, mert 3 inches képernyőn azért nem a tökély :)) De tableten note-stylussal meg ujjal is nagyon jó.

  • thon73

    tag

    Ha esetleg van valakinek tapasztalata ilyesmivel - a doksi több helyen is ezt írja a send...KeyEvent() metódusoknál:
    "Note that it's discouraged to send such key events in normal operation; this is mainly for use with TYPE_NULL type text fields, or for non-rich input methods. A reasonably capable software input method should use the commitText(CharSequence, int) family of methods to send text to an application, rather than sending key events."
    Ebben az esetben hogyan tudok olyasmiket visszaküldeni mint pl. fel-le nyilak? Mert a közvetlen környezetemet még csak-csak elszerkesztgetem, bár egy backspace, delete, jobbra-balra megoldása sem túl egyszerű.

    A másik teljesen független kérdésem, hogy egy custom View szeretné megváltoztatni a saját méretét (vagyis onMeasure-ben EXACTLY esetén más értéket adna vissza), akkor milyen utasítást kell kiadnom? requestLayout? invalidate? Köszönöm!

  • thon73

    tag

    válasz Karma #2497 üzenetére

    Köszönöm! Az előbbire egyébként az egész neten alig van valami, és az idézettel szemben a példaprogram sem így működik. Alighanem egy bill.kód elemzővel megnézek egy-két kész softkeyboardot...

  • thon73

    tag

    Van valakinek tapasztalata a View onMeasure() metódusában?

    <FrameLayout android:id="@android:id/inputArea"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:visibility="gone">
    </FrameLayout>

    Ebbe a FrameLayout-ba helyezek egy custom View-t, aminek semmilyen Layout paramétert nem adok meg. Ilyenkor - gondolom a Frame Layout miatt - teljes képernyőszélesség:MeasureSpec.EXACTLY és teljes képernyőmagasság:MeasureSpec.AT_MOST értékekeket kapok az onMeasure paramétereiként.

    Hiába írom be a kép létrehozásánál pl. ezt:

    boardView = new BoardView( this );
    boardView.setLayoutParams( new ViewGroup.LayoutParams( 200, 200 ) );

    NEM 200x200-as kérést, hanem az előbbi értékeket kapom. (Akkor is, ha ViewGroup helyett FrameLayout-ot adok meg, hiszen az csak leszármazottja.)

    Ezzel szemben, ha készítek egy res/layout xml-t, és ugyanezt a custom View-t abból (inflate-tel) készítem el, akkor figyelembe veszi a View-hez beírt layout paramétereket.

    Két kérdésem van:
    - Mit rontok el a programkódnál megadott paramétereknél, ami miatt nem veszi azokat figyelembe?
    - Mikor vehetem biztosra, hogy a megkapott mérési értékek a teljes képernyő méretét fogják tartalmazni - már amennyiben semmilyen layout paramétert nem adok meg? (Az oké, hogy AT_MOST, meg EXACTLY jelzőkkel)

    Amúgy a kép arányaihoz akarom passzintani a View-t, ami rendben is működik - ha a második kérdésre "mindig" a válasz. A másik részt meg csak simán nem értem - eredetileg ezzel akartam volna biztosítani a második kérdést...

    [ Szerkesztve ]

  • thon73

    tag

    Ha készítek egy RGB_565 kódolású bitmap-et, akkor van lehetőségem a "nyers", 16 bites color információ kinyerésére/beállítására? (mondjuk egy ponton) Vagy hogyan módosul a setPixel/getPixel color értéke (ami elvileg ARGB_8888)? Az R-G-B byte-ok utols 5 (ill. G esetén 6) bitje kerül felhasználásra? Vagy arányosan tömöríti a színeket?

    Sehol nem találtam erre útmutatást, és amit kipróbáltam, abban sem értem, hogy mi történik. Hogyan lehet az ARGB_8888 és az RGB_565 értéket egymásba konvertálni? (Tegyük fel, hogy az "elveszett" színek nem számítanak, csak az átkonvertálhatóak)

    Előre is hálásan köszönöm!

  • thon73

    tag

    válasz thon73 #2570 üzenetére

    Úgy tűnik, mindig túlságosan elvarázsolt problémákkal találkozom... :(((

    Hátha mégis valaki beleütközik ugyanebbe, megválaszolom magamnak.

    Megdöbbentő módon az Android valójában csak kétféle módon tudja a bitmap színeket kezelni: ARGB_8888 és RGB_565 kódolással. (Létezik, de nem javasolt az ARGB_4444. Létezik, de nem működik a getPixel() metódussal az ALPHA_8)
    (((Nekem még nem okozott problémát, de a megjelenítés ált. RGB_565-tel történik, vagyis valahol az ARGB_8888 mindig átalakításra kerül.)))

    Egy "térképet" szerettem volna megrajzolni (ezért nem jó egy tömb) 512 különböző színnel. A szinek nem lényegesek, az viszont igen, hogy pont azt a színt "vegyem ki", amit a képbe belerajzoltam. A korlátozott hely miatt arra gondoltam, hogy valamelyik helytakarékosabb kódolást fogom választani.
    Ez viszont egyáltalán nem egyszerű, mert a getPixel által visszaadott alapszínek(R,G,B) mindig 256 árnyalat terjedelműek lesznek - nem pedig a kódolással azonosak. Továbbra sem találtam metódust a "raw" színérték megszerzésére.

    ARGB_8888 alatt persze minden tökéletesen működik, hiszen itt minden alapszín 256 árnyalattal kódolt. Ehhez azonban dupla hely kell...

    ARGB_4444 alatt az alapszinek 4 bit terjedelműek, vagyis 16 árnyalatuk van. Ha azonos színt akarunk visszaszerezni, akkor a szinek 4 bites értékét dupláznunk kell: 2->22 8->88 c->cc (hexában). Az ilyen, hexában azonos számjegyekkel bíró színeket megadva (pont 16 van) ugyanazt a színértéket kapjuk a getPixellel, mint amivel rajzoltunk.

    Persze, semmi nem elég, nekem az RGB_565 kódolású rajzból kellett azonos színeket kiszednem. A source kód a dithering miatt elég elvarázsolt, nehéz kideríteni, hogy pontosan hogyan kódol, ill. sokkal összetettebben kódol, mint amire ehhez a feladathoz szükség van. Matematikailag a következő összefüggést találtam:
    5 bites szinek - R és B, 32 árnyalat: setPixel( árnyalat * 8 + 5 ) beállítás után a getPixel() / 8 visszaadja az eredeti árnyalatot.
    6 bites szín - G, 64 árnyalat: setPixel( árnyalat * 4 + 2 ) beállítás után a getPixel() / 4 szintén az eredeti árnyalatot adja vissza. ((Megjegyzem, az első 32 árnyalatra az előző összefüggés is működik))

    Bocs, ha valakit untattam ezzel, de nekem hosszas fejtörést okozott, hogy megtaláljam azokat a színeket, amiket beállítva ugyanazt az értéket kapom vissza. Megjegyzem, hogy több különböző alapszín árnyalatot ezek a kódolások nem is tudnak tárolni, az összes többi "bemeneti" szín ezen árnyalatok valamelyikére redukálódik.

    Még annyit tennék hozzá, hogy amennyi info-t találtam, az Android ebben is elég egyedi. Vannak 565-888 színkódolás átalakítások, de mintha az android egyiket sem követné, hanem valami saját algoritmusa lenne. :C

  • thon73

    tag

    válasz LordX #2596 üzenetére

    Viszont működik ;)
    Ez nem a 4-8 bites konverzió. Ez a "függvény" azt a 16 (4 biten) 32 (5 biten) vagy 64 (6 biten) alapszínt választja ki, ami a setPixel()-nak átadva, majd a getPixel-től visszakérve önmaga marad. Ez uis. csak ezekre a színekre igaz, az összes többi szín ezek valamelyikére fog alakulni (lévén több színt ekkora helyen nem lehet ábrázolni.)
    Ha valahogy meg tudnám szerezni rgb_565 formátumban a színadatokat, akkor erre semmi szükség nem lenne.

  • thon73

    tag

    Sziasztok!
    PreferenceActivity-n belül csinált már valaki olyan Preference-t, ami 'int' értéket ment el? Maga a Preference forráskód minden típusra (intre floatra stb.) tartalmaz egy-egy metódust, de bevitelre csak az EditTextPreference osztályt találtam, ami csak String-et tárol.
    Köszönöm, ha van egy link vagy útmutató!

  • thon73

    tag

    Készítettem egy InputMethodService-t. DE az inicializálás (ami csak akkor történik meg, amikor ezt a billentyűzetet kiválasztjuk) rel. hosszú idő.
    Hogyan lehet egy ilyen service-ből időigényes feladatot végrehajtani? AsyncTask-kal? Az indítható service alól? Előre is köszönöm!

  • thon73

    tag

    válasz thon73 #2735 üzenetére

    Sőt, továbbmegyek. Valószínűleg inkább egy Loader-re lenne szükségem, ami a Service inicializálását elvégzi. Találtam egy ilyet Can you use a LoaderManager from a Service?
    Van ezzel valakinek tapasztalata? Akár az AsyncTask, akár a Loader nagy segítség lenne... Jelenleg van egy 4-5 mp-es előkészítési idő, amit a rendszer már nem enged meg. ((De csak egyetlen egyszer, amikor a service-t először elindítom.)) Köszönöm!

  • thon73

    tag

    Egy apróságot meg tudnátok nekem erősíteni?
    Egy color értéket szeretnék int-be tenni, ami ugye unsigned. Viszont long értékként kapom meg.

    long colorInLong = 0xFFFFFFFF;
    int color = (int) colorInLong;

    Ez a konverzió minden esetben jó lesz? Vagy miként illik ezt elvégezni? (A long valid color értéket tartalmaz.) Köszi!

  • thon73

    tag

    válasz Superhun #2761 üzenetére

    Tehát minden esetben csak levágja a long felső két byte-ját, és az alsó kettő lesz az int, mintha nem is lennének negatív számok (mármint a longban). Vagyis pl. a -2L az nem -2 lesz int-ben, ha megfordítjuk a kérdést.

    Köszi, ez nagyon fontos, mert így 5 betűvel - (int) - megoldottam az egész átalakítás kérdést. A legtöbb helyen (pl. sqlite) az Androidban uis. long szerepel. És a Color-ban ehhez nincs semmi segítség; bár a fentiek alapján nem is kell.
    Köszönöm! :R

  • thon73

    tag

    válasz vlevi #2763 üzenetére

    Hát ez az. De az int ugye signed int. Ezért nem mindegy, hogy a long->int veszteséges átalakításnál mi történik. Ha csak eldobja a felső két byte-ot, akkor minden ok. Ha azonban az átalakítás Integer.MAX_VALUE és MIN_VALUE között történik, akkor az algoritmustól függően a színek (kevésbé átlátszó) felét elveszíthetem.

    Eddig úgy tűnik, hogy a primitív típusoknál az előbbi történik. Abban nem voltam biztos, hogy ez mennyire biztosan van így.

  • thon73

    tag

    válasz vlevi #2765 üzenetére

    Többek között ez bizonytalanított el: saturatedCast
    Tehát vannak olyan algoritmusok, ahol az előjelbit "elveszik".

    De a válaszok alapján primitív típusokkal nyugodtan dolgozhatok. Köszönöm!
    ((tovább olvasva rájöttem, hogy a primitivek közötti levágást konverziónak, ezt meg castnak nevezi az irodalom))

  • thon73

    tag

    válasz Sianis #2767 üzenetére

    Bocs a késői válaszért...

    Teljes mértékben egyetértek, én is így szoktam megadni.

    De most kivételesen egy xml-szerű, human-readable leíró fájlból érkeznek az adatok, többek között a színek is. A számok (tehát a színkódok is) long pontossággal kerülnek feldolgozásra.
    Amúgy eddig a részig prímán működik :)

  • thon73

    tag

    válasz Gerzsi #2825 üzenetére

    Ha még nem kezdtél semmi komolyba, nekem van egy-két ötletem... ;]

    - atomik billentyűzet (magyar párja a kinesa)
    - könyvolvasó szótározórésszel, és a kiírt szavakat ki is kérdezi (önbevallásos módon).
    - még jobb, ha az olvasó-rész egyúttal szerkesztő is (ld. a régi WordSmith PalmOS alól)
    - még jobb, ha a szerkesztő nem (csak) a formátumokkal, hanem a színekkel is kombinál - ez kis képernyőn előnyösebb (ld. ugyanaza a progi)
    - még jobb, ha legalább minimális makrólehetőségekkel is bír
    - további - akár univerzálisan használható - makrószöveg kezelő (szintén volt PalmOS alatt, de nem emlékszem a nevére). Ez nem makrónyelv, csak előre beírt szövegeket enged fa-struktúra szerűen pillanatok alatt előkeresni.
    - további ötlet szövegszerkesztésre - diktafonnal egybeépített szövegszerkesztő. Még olyan programot sem találtam, ahol rendesen lehetne a felvett audiorészben pozícionálni, nem ám olyat, ami egyszerre vesz fel, és egyszerre enged írni - a kettőt összehangolva. ((Fontos megjegyzés: tablet+Bt keyboard pont olyan gyors, mint a nagygép; a fenti kinesa mellett láttam a 200 feletti sebességet, én is 100 körül írok - tehát lehet szöveget írni tableten, sőt telefonon is.))
    - más téma: adatbázis kezelő (leginkább egy front-end), DE ami össze van kötve a naptárral és a címtárral (vagy egyebekkel is). Ilyen sincs egy se.
    - futás (sport) közben egy mérés mellett kitartásra is buzdító szöveges (svox) szoftver. Pl: "kitartás, már csak 200 m a hegy teteje!" :D
    - folyadék fogyasztást (kalória stb. akár) "mérő" program. Ezt szaknyelven úgy is hívják (ha a másik oldalt is méri a delikvens): vizelet ürítési napló.

    Ha ez mind kész,még van egy-két ötletem. :C

    A projektek 0-80%-os készültségi fokban részben meg is vannak; érdeklődés esetén szívesen közkincsé teszem. És ha valaki elkészíti, elsőként fogom letölteni a fizetős változatot!

  • thon73

    tag

    Nekem is lenne egy-két apró kérdésem Android Studio fanokhoz (lusta voltam, eddig csak épp kipróbáltam, most viszont már nincs is más...RIP Eclipse...)
    1. Ubuntu 14.04 alatt 4 Gb aktív memória mellett memóriahiányról panaszkodik (csak a virtuálisgép kezelő). A /tmp könyvtár mondjuk ram-ban van, mert ssd használok. Ezzel van valakinek tapasztalata? Dobjam ki a tmp-t a ssd-re? Vegyek még négy Gb-ot? Volt aki már találkozott ilyennel?
    2. Csaknem olvashatatlan az editor rész. Ugyanakkor azt írja, hogy a font megváltoztatása nem javasolt. Ezzel van valakinek tapasztalata? Esetleg egy javaslata valami jó fontra? Hátha nem kell végigprógálgatnom az összeset. (jó, tudom: ízlések és pofonok, de akkor is)
    Előre is köszönöm!

  • thon73

    tag

    válasz thon73 #2841 üzenetére

    Még egy kérdés: Ezt írja az Android Studio:
    "OpenJDK shows intermittent performance and UI issues. We recommend using the Oracle JRE/JDK."
    Tényleg lényeges az Oracle telepítése? Ubuntu alatt ez nem annyira egyszerű uis.
    Ti mit használtok?

  • thon73

    tag

    válasz WonderCSabo #2847 üzenetére

    Szóval Oracle JDK 8?
    A korábbi gépen fent volt (Eclipse mellett), de egy idő után nem jött a frissítés, és az internetbanking panaszkodott. Azóta OpenJDK volt; de akkor visszatérek.
    Köszi!

    Amúgy "gondom" nekem sincs vele, inkább csak ismeretlen, csak igen komoly erőigénye van. Win7 és Ubuntu 14.04 alatt is használom, a std. virtuális gép egyikben sem talált elég memóriát (hiába 4Gb már kevés...). A saját tabletemmel mondjuk gond nélkül kommunikált.

    Még egyet áruljatok el, légy szíves! Minden betű széle kissé lila (Ubuntu alatt), akármit állítok. A rendszerbeállítások hatástalannak tűnnek, ha a Settings-ben kapcsolom ki az antialias-t, akkor meg borzalmasak lesznek a betűk. Csak nekem káprázik a szemem?

  • thon73

    tag

    válasz thon73 #2848 üzenetére

    Bocs, tudom: google a barátom :K
    Megvan a hiba meg a megoldás is: How to fix font anti-aliasing in IntelliJ IDEA when using high DPI?
    Aj, pedig úgy tűnt, hogy ezt most télleg minden gond nélkül feltette. De aztán mégse. :(((

  • thon73

    tag

    Bocs, ha nagyon alap és off a kérdésem; viszont ha valaki megvilágítaná, azt nagyon megköszönném.
    KÉT Android Studio között szeretném a projektet átmozgatni. (Praktikusan hol az otthoni, hol a munkahelyi gépen dolgozom. Amúgy Eclipse alatt ez simán ment másolással, itt nem.) Addig jutottam, hogy erre a GitHub a legjobb, az alaplépések meg is vannak.
    A kérdésem az, hogy miként tudom megtenni, hogy ne keletkezzen millióegy commit? Én csak a főbb lépcsőket szeretném a GitHub-on tartani. Ha mondjuk délelőtt van egy fél órám, este egy másik fél, akkor ezt a kétszer tíz sort pl. nem.
    Vagy esetleg van valami egyéb kézenfekvő módszer erre, ami elkerülte a figyelmemet?
    Köszönöm!

  • thon73

    tag

    válasz Sianis #2964 üzenetére

    Köszönöm! Ez jó ötlet. És akkor az egyes brancheket kell csak átnéznem, ha a "nagy" változtatásokra vagyok kíváncsi.
    Egyébként a "master" szál commit-jait a legvégén ki tudom törölni? Vagy csak amíg nem töltöttek le belőle (hiszen én magam fogom letölteni mindig a másik gépen)? Vagy akkor az "oldal"-branchok sem tudnak hoova kötődni? Vagy ez hülyeség, és úgy kell hagyni, ahogy van?
    Bocs, de tényleg csak az alaplépéseket ismerem a gitből, az AS meg absz. erre támaszkodik. Ami amúgy egyáltalán nem baj, mert minden segédeszköz nélkül a kék égen közlekedik az anyag...

  • thon73

    tag

    válasz WonderCSabo #2967 üzenetére

    Köszönöm, kipróbálom a válaszokat - vagyis a rengeteg commitot és a brancheket is.

    Egyébként dolgozik valamelyikőtök két (vagy több) gépen? Mármint h, saját tapasztalattal ez milyen?

  • thon73

    tag

    válasz WonderCSabo #2970 üzenetére

    :R :R :R
    Éppen pont ez az, amire gondoltam!! (csak nem tudtam, hogy erre gondolok; meg csak a master/develop szálat fundáltam ki)
    Nem állítom, hogy minden git utasítást fejből tudnék, ami ilyen klassz elrendezést csinál - pláne nem az Android Studio alatt -, de ezt már majd kikeresgélem.
    Sejtettem, hogy ezt tudnia kell egy ilyen rendszernek. Hála és köszönet!
    :C :C :C

  • thon73

    tag

    válasz lanszelot #3018 üzenetére

    Bocs, hogy sokadikként csak most kapcsolódok bele a témába!

    Ami off: - kétségtelen, hogy hobbiból - de nekem kb. egy évembe került, amíg C tudásra építve megismertem a javat és az android módszereit. Szerintem, sajnos, az android nem az a rendszer, amit össze lehetne legózni - itt egyszer meg kell érteni a rendszer fifkáját. Activity, Fragmentek stb. És ebben az egész tanulásban a leghosszabb és legnehezebb az adatbázis rész volt. Ezt nem elkeserítésnek szerettem volna, mert én is elég jól átvergődtem rajta, csak - szerintem - erre egy kis időt rá kell szánni.

    Amit Te szeretnél: CSAK beírás és tárolás, ahhoz nem kell mindenáron az adatbáziskezelőt használni. Kell néhány EditText, meg egy metódus, ami ezeket elmenti. Igaz, hogy ez fényévekkel kevesebbet tud, mint az adatbáziskezelő, de fényévekkel egyszerűbb megoldani.

    Az adatbáziskezelő több hiányossággal küzd.
    Egyrészt nincs hozzá "felület" - vagyis az űrlap, azt neked kell elkészíteni (ahogy a példaprogramban is látható)
    Másrészt nincs export/import funkció, azt is neked kell megcsinálni. (A db, amit keresel, a "védett" területen van, valahol itt: /data/data/package-name/database. Nem vagyok biztos abban, hogy ez root nélkül könnyen elsőszedhető.)

    Én nekiálltam egyfajta adatbázis keretrendszert készíteni, ami könnyen átalakítható bármilyen adatbázis/űrlap-ra, ill. az export/import funkciót is tudja. Persze, ez mind változtatást igényel a programon. Magát a projektet már egyszer itt közreadtam: [link] Ez egyébként még Eclipse projekt, de az AS importálja. A korábbi kódhoz képest a "másik véglet", elég összetett program, de semmi varázslás nincs benne. Mondjuk, egy kis android ismeret nem árt hozzá, de a megoldások, jegyzetek alapján el lehet indulni.

    Remélem, ez ad még egy kis segítséget a munkádhoz!

  • thon73

    tag

    válasz lanszelot #3020 üzenetére

    Bocs, de szerintem ez ciki.
    Se nem lovagoltam, se nem rugdostam. Pláne nem karöltve másokkal, mert személyesen nem is ismerik itt senkit.
    De ez idáig senkit nem akadályozott abban, hogy segítsen nekem - mégpedig rengeteget, amiért nagyon hálás vagyok.
    Én is csak segíteni akartam neked egy további kóddal, ami megmutatja, hogy miként tudod előszedni az adataidat.
    Ha te azt gondolod, hogy ez rugdosás, akkor csak mérhetetlenül sajnálni tudlak. De bocs, azért is, hogy szólok - ennek végül is se helye, se lényege.

    Mindenesetre, mint írtam, a file-odat itt keresd:

    /data/data/package_name/databases

    root vagy adb (vagyis PC) kelleni fog hozzá. Kis útmutató pl. itt.

    Örömteli kódolást!

  • thon73

    tag

    válasz lanszelot #3023 üzenetére

    Melyik linket a kettő közül? Melyik szakszót? Segítek szívesen.

    A lényeg:
    A program védett helyeihez CSAK maga a program fér hozzá. Vagy akinek ROOT jogosultsága van. Ilyen jogosultsága lehet egy másik programnak a ROOT-olt telefonon, vagy a PC-n az adb-nek.

    Ha ilyen nincs, akkor magának a programnak kell "kimásolnia" vagy egy file-ba exportálnia az adatbázis adatait. Ez nem túl egyszerű, de megoldható. Erre példa az az adatbázis, amit korábban küldtem. Az SO linkben pedig a kimásolására van egy program-rész.

    Mivel ez egy Eclipse project, PC nélkül nehéz átnézni, meg lefordítani. Én tableten az AIDE-t használom, ami egy az egyben olvassa ezeket a projekteket. Valószínű, egy ekkora projekt már igényelni fogja belőle a fizetős verziót. Amúgy az sok extrát is tartalmaz, sztem. megéri megvenni, ha magán a tableten fogsz programozni.

    Szerintem, ha csak egy űrlap és az adatok mentése kell, akkor - még működő adatbáziskezelő mellett is! - egyszerűbb a beírt adatokat rögtön egy file-ba menteni. Ne érezd bántásnak - de szerintem még meg kell ismerd jobban az android rendszert ahhoz, hogy az export-ot biztonsággal el tudd készíteni. Egy fórumnak a keretei nem elgendőek ahhoz, hogy ezt minden részletében kitárgyaljuk. De a kód amit küldtem tartalmazza, és könnyen a Te adataidhoz passzintható.

  • thon73

    tag

    válasz lanszelot #3029 üzenetére

    A lehető legjobb szándéktól vezérelve írom, hogy Neked egy java könyvet kellene először kézbevenned. A saját tapasztalatom szerint az Android-ra éppen nem igaz, amit írtál: vagyis van egy működő kód, és itt-ott belejavítasz. Ezzel lehet módosítani egy-egy feliratot, vagy formát, de további funkciót - amire neked szükséged lenne - nem tudsz hozzáadni. A feladat első része: megváltoztatni az adatbázis mezőket, még megoldható, de az adatok kinyerése már így lehetetlen. Ha Te meg akarod tanulni, annak sincs akadálya, de el kell kezdeni az elején. A konkrét feladathoz szerintem még talán itt is találsz vállalkozó kedvű embert, aki megoldja neked.

    "Az external a bővíthető memóriát jelenti, vagy a telefonban lévőt? Nekem nem bővíthető a telefon memóriája."
    A rendszer szempontjából az external memória nem az SD-kártyát jelenti, hanem azt, amit nem a rendszer használ. Ez lehet beépített vagy külső (pl. SD), a lényege, hogy jogosult vagy olvasni/írni a tartalmát. Ha ki akarod nyerni az adataidat, akkor az egyik legegyszerűbb megoldás, ha ide írod ki azokat. A rendszer/programok által használt rész "védett", vagyis nincs jogod olvasni, még akkor se, ha Te vagy a telo tulajdonosa. Az Android-on ugyanis minden egyes program külön felhasználót jelent, és pont ugyanannyira nem férhet hozzá egyik program a másik program adataihoz, mint egy felhasználó a másikéhoz egy PC-n. Sőt, még annyira se, mert meg sem engedheti neki.

    Leegyszerűsítve:
    A programok által használt memória: számodra elérhetetlen.
    A "külső" (beépített vagy SD): szabadon elérhető, de kell írnod egy külön programrészt, ami ide ment.

    "thon73: Bocsánat, de nem értem amit írtál."
    Leegyszerűsítve:
    A korábbi link tartalmaz egy komplett programot, amiből egy egyszerű adatbázis (ld. később) kezelhető. Adatok vihetők be, módosíthatóak, sőt el is menthetőek (export) a külső memóriába.
    Ez a program épp az, amit kis felületes módosítással átalakíthatsz magadnak. De maga a program sokkal összetettebb, mint az előttem szólók által feltöltött.
    Azért azt megjegyezném, hogy a feladat, amit megoldani szeretnél, kb. ilyen összetettségű kódot igényel.

    "A program nyelv egyszerű. Úgy kell olvasni mint az újságot. De újságot írni nem tudok."
    A programod egyik felét Te írod, a másik fele az Android rendszer. A Te hasonlatoddal élve olyan, mintha az újságban a hasáb felét letakarnád, és úgy próbálnád elolvasni. Egyszerűen ismerni kell az Android oldalt, mert az annyi mindent készen tol a programok feneke alá. Ezt nem fogod meglátni a kódban, (((legfeljebb a rendszer forráskódjában)))

    "Nem tudom a szak kifejezéseket."
    Ez csak azért baj, mert nem tudunk egy nyelvet beszélni. Senki sem tud minden szakkifejezést, én biztos nem. De egy kis harapással elkezdem, és akkor abban már tudnak segíteni.

    "Nem tudom mi az, hogy adatbázis"
    Az adatbázis az szinte egy külön rendszer és külön nyelv az android-on belül. SQLite-nak hívják, így tudsz utánaolvasni, nagyon jó a doksija.
    Általánosságban az adatbázis az adatokat táblázatosan tárolja, közelítve: az oszlopok felenek meg az űrlap mezőinek, a sorok egy-egy azonos űrlap adatainak. Mivel a sorok egyformák, ezért nagyon könnyű nagy mennyiségű adattal dolgozni. Úgy képzeld el, mint rengeteg excel dokumentum együttesét. ((Bocsánat, ez csak egy segítő megközelítés, a valóság ennél sokkal többet tud, de valahol itt kell elkezdeni.))
    Egyébként a legjobb "adatbázis wiki", és a google segít.

    ", se azt, hogy AIDE"
    AIDE Ez egy olyan fejlesztőrendszer, amit a tableten tudsz használni. Vagy akár a telo-n. Ha nincs PC.

    ", SO"
    http://stackoverflow.com/ egy olyan oldal, ahol fel lehet tenni konkrét kérdéseket egy problémára, és megoldásokkal válaszolnak. Azért jó, mert 1. már majdnem mindent megkérdeztek 2. nagyrészt meg is válaszoltak 3. témák szerint kereshető. Angolul persze.

    ", Eclipse se semmit."
    Az Eclipse volt az Android korábbi fejlesztőrendszere. Az ami ma az Android Studio. Ezt azért kell tudni, mert még majdnem minden példaprogramot Eclipse alá fogsz megtalálni. Szerencsére az Eclipse projekteket az Android Studio be tudja tölteni.

    Ja, igen. A projektek.
    Az android programot ún. projektben készítik el. A projekt könyvtárszerkezete kötött, és rengeteg file-t tartalmaz, amihez a tényleges programnak semmi köze. Ezért nem értetted sztem. a küldött példákat. Neked a projektből csak a kódot kellene elolvasnod, viszont a teljes projekt sokkal könnyebben betölthető egy fejlesztő-rendszerbe (pl. Android Studio), ha kezdő vagy.

    "mert biztos vagyok benne, hogy ezt meg kell változtatnom:
    String backupDBPath = DB_NAME;"
    Nem, ezt speciel teljesen felesleges megváltoztatnod sztem. Erre csak akkor lenne szükség, ha több adatbázist is tartalmazna a programod.
    Ebben erősítsenek vagy cáfoljanak meg a többiek, de én nem találtam olyan módszert, amivel a beépített adatbáziskezelő az adatokat máshol tudta volna kezelni. Vagyis nem lehet megkérni arra a rendszert, hogy a programod adatbázisát tegye olyan helyre, ahol eléred. Az kötötten a megadott könyvtárba kerül. Ki kell másolni onnan.

    "Olvasni, bővíteni tudok, de létrehozni nem!"
    Szerintem kezd a java-val, az magyarul is hozzáférhető. Itt elapad a magyar irodalom, jön az angol. De az Android (ld. doksit a saját oldalán), SQLite (szintén saját oldala), és az ezen a fórumon már számtalanszor felsorolt forrásokon elindulva szépen meg lehet ismerni az Android rendszert. Vagy legalábbis azt a szeletét, ami téged érdekel.

    Bocsánat, hogy kicsit hosszúra sikeredett. Sajnos, nem lehet célom, hogy az egyes kérdésket megvilágítsam, sokkal inkább arra szerettem volna felhívni a figyelmedet, hogy milyen gazdag is ez az egész Android. No persze, ez aránylag sok idő, de nem is kell egyszerre az egészet megemelni. Szerintem nulláról kb. 1 hónap alatt el lehet jutni egy űrlapig, talán még az elmentéséig is. Az adatbáziskezelésre viszont legalább egy fél évet jósolnék nulláról.

    És tényleg a legteljesebb jószándékkal írtam, elsősorban azért, mert én is végigcsináltam.

  • thon73

    tag

    válasz lanszelot #3039 üzenetére

    Illetve csak long van. Nem az adatbázisban lesz a baj, hanem valahol átteszi java-ba, ahol viszont int szerepelhet.
    Két dolog kellene: maga a hibaüzenet (a logcatban lesz), és a hibás rész kódja.

    ((Egyébként az integert tényleg ki kéne cserélni stringre, mert különben pl a '+'-t sem tudod tárolni. Meg a spaceket se. Meg a bevezető nullákat se.))

    [ Szerkesztve ]

  • thon73

    tag

    válasz lanszelot #3043 üzenetére

    Olyan nincs, hogy nincs hibaüzenet. Ez nem windows.
    Olyan sincs, hogy üres az adatbázis, mert ezek a programok az adataikat az adatbázisban tárolják, onnan írják ki. Ha a programban vissza tudod olvasni az adatokat, akkor azok az adatbázisban vannak.
    Olyan viszont van, hogy valami valahol hibás. Ez a programozás szépsége: a hibakeresés.
    A "Hol a hiba?" kérdésben akkor lehet segíteni, ha valamelyest ismerjük a biztosan jól működő részeket/a valószínűleg hibás részeket/ill. azt, hogy Te meddig jutottál a hibakeresésben. Ezzel együtt is jóval nehezebb, mint egy új kódot elmagyarázni.
    Amit tudni kellene:
    1. végül milyen fejlesztőrendszert használsz? Android Studio?
    2. végül melyik kódot tetted fel? Amit Sianis küldött?

    Ha saját programot teszel fel, akkor mindenképp ismerned kell a "logcat"-ot. Ez egy olyan napló, amit a programok folyamatosan írnak. Ide kerül minden üzenet, többek között a hibaüzenet is. Telefonon - biztonsági okokból - CSAK roottal férsz hozzá, vagy persze a saját program a saját log üzeneteihez (de azt megintcsak ki kell másolni)
    Az Android Studioban, ha jól van feltelepítve, a program futtatása közben meg kell jelenjen egy ablak, amiben futnak az üzenetek. Azt kell szűrni. Alaphelyzetben balra lenn van egy kis Android figura, azzal lehet előkeresni az ablakot.

    Ha ez megvan, akkor olvasd el a Log osztályt, és máris tudsz magadnak a kódból üzeneteket küldeni. Nem egy nagy történet, és minden adatot ki tudsz írni, látod, hogy mi tűnt el. Ha megvan az a hely, ahol az adat eltűnik, és nem jöttél rá, hogy miért, akkor itt többen is meg tudjuk nézni.

    Én magam csak átfutottam Sianis kódját, de egyrészt feltételezem, hogy működő kódot küldött, másrészt nem láttam benne hibát. Ettől még az ördög nem alszik persze.
    Mindenesetre, ha nála jó, és nálad nem, akkor még kell egy csomó információ, hogy látni lehessen a különbséget.

  • thon73

    tag

    válasz lanszelot #3045 üzenetére

    Nolan Lawson CatLog emlékeim szerint, vagy a Play-en keress rá a logcat-ra. ROOT kell hozzá, mert különben nem engedi kiírni más program logcat-ját.
    Másik út, ha a programod teszi közzé valahol a hibaüzeneteit. Ez megy Root nélkül is, de jelentősen bővíteni kellene az amúgy sem működő programot.

    Hol használod az AS-t, ha nincs hozzá PC? Megy linux, úgy tudom mac alatt is.

  • thon73

    tag

    válasz lanszelot #3057 üzenetére

    Az a hiba, hogy: "not well-formed (invalid token)"
    Nem küldenéd el a layoutot? Akkor egy másodperc alatt meglenne a hiba; ez nem egy nagyon összetett cucc...

  • thon73

    tag

    válasz lanszelot #3059 üzenetére

    Ezt nézd meg egyszer, (bocs a külső hivatkozásokat kivettem)

    <?xml version="1.0" encoding="utf-8"?>
    <ScrollView
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context=".MainActivity"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">

    <EditText
    android:id="@+id/name"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:hint="hint_name"
    android:inputType="textPersonName"
    android:maxLength="99"
    android:singleLine="true" />

    <Button
    android:id="@+id/saveButton"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="save" />
    </LinearLayout>

    </ScrollView>

    Még van egy olyan, hogy: android:fillViewport="true" a scroll részen belül, de nem tudom, hogy egyetlen soros szövegnél van-e hatása.
    A RelativeLayout-nak egyetlen ablaknál (egyetlen child-view-nál) nincs szerepe, az kivehető. És ki kell venni az összes ez-alá, e-fölé dolgot is. Itt uis. van egy scrollview, ami egyetlen "ablakot" (child-view-t) képes kezelni, ami a LinearLayout, ami viszont a benne lévőket csak egymás alatt bemutatja.

  • thon73

    tag

    válasz lanszelot #3064 üzenetére

    Bocs, én töröltem ki a hivatkozásokat, mert nem akartam egy komplett kódot csinálni az AS-ben.
    Csak írd elé, hogy @string/, és működni fog hibaüzenet nélkül. Pont úgy írd be, mint az általad küldött kódban. És a hint_name-nél ugyanúgy.

    Ez egyébként azt jelenti, hogy a külön definiált stringek közül jelenítesz meg egyet, vagy az ide beírtat jeleníted meg. Az előbbi esetben könnyebb más nyelvre lefordítani - a mi esetünkben sztem. ennek még nem sok jelentősége van.

    [ Szerkesztve ]

  • thon73

    tag

    válasz lanszelot #3066 üzenetére

    :C
    Csak a szöveges részt (gondolom TextView) is ugyanoda és ugyanúgy tedd be, mint az EditText-et és a Button-t! Akkor scrollozható a többivel együtt.

    Csak úgy statisztikai érdekességként visszaolvastam, ebben a témában épp egy tucat válaszadó vett részt a kérdező mellett. A magam részéről csak gratulálni tudok a fórumnak!

  • thon73

    tag

    válasz lanszelot #3069 üzenetére

    Csak ismétlem magamat: miért nem nézed meg a korábbi hozzászólásomban lévő projektet? zip-ben van egy eclipse project, de az as beolvassa.
    Az épp azért készült, hogy egy könnyen bővíthető felület legyen az adatbázishoz. Ezt ugyan nem, de más változatait én mind a mai napig használáom. Az alapszintű adatbázisműveleteket tudja.
    Hozzáteszem: egy ilyen program nagyon sok munkát igényel, még a megértése is; a korábbiak alapján sztem. neked egy kicsit egyszerűbbel kéne kezdened. Ettől még ott van, és kipróbálható.
    ((És nem önreklám miatt írtam, én is csak tanulgatom az androidot, de éppen-pont erre készült.))

Új hozzászólás Aktív témák