- Honor Magic V2 - origami
- Yettel topik
- Redmi Watch 4 - olcsó hús, sűrű a leve
- Apple iPhone 13 - hízott, de jól áll neki!
- Android alkalmazások - szoftver kibeszélő topik
- Samsung Galaxy S21 és S21+ - húszra akartak lapot húzni
- Motorola Edge 40 - jó bőr
- Mobil flották
- Samsung Galaxy S21 Ultra - vákuumcsomagolás
- Samsung Galaxy S24 Ultra - ha működik, ne változtass!
Hirdetés
-
Kicsit később indul a The Rogue Prince of Persia korai hozzáférése
gp A pontos dátumot a következő hétfői napon jelentik meg a készítők.
-
Toyota Corolla Touring Sport 2.0 teszt és az autóipar
lo Némi autóipari kitekintés után egy középkategóriás autót mutatok be, ami az észszerűség műhelyében készül.
-
Már nem hisz a nagy európai EV-forradalomban a Ford
it Meggondolta magát a Ford, a helyzetre való tekintettel 2030 után is kínálhat Európában hibrid és benzines autókat.
Új hozzászólás Aktív témák
-
Karma
félisten
válasz trisztan94 #1147 üzenetére
Egy ilyen hangfelismerést megcsinálni nem nagy varázslat, csak pár elem kell hozzá: folyamatos hangfelvételt kell csinálni, a beeső hangadaton FFT-t számolni, és figyelni, hogy mikor lesz egyszerre minden frekvencián erős a jel. A taps ugyanis úgy néz ki körülbelül.
Ezek mindegyikére van kész kód StackOverflow-n.
“All nothings are not equal.”
-
Karma
félisten
válasz SektorFlop #1161 üzenetére
Ha esetleg nem így lenne, csináld meg úgy az adapteredet, hogy újrahasznosítsa a View-kat, ne pedig minden egyes lépésnél újat hozzon létre. A getView metódus convertView paraméterében beeső Viewt tudod erre használni.
“All nothings are not equal.”
-
Karma
félisten
válasz SektorFlop #1164 üzenetére
Szerintem azzal nem nagyon tudsz mit csinálni, hiszen a listaelemeket le kell gyártani...
StackOverflow-n mondjuk láttam egy olyat, hogy ha a listának a layout XML-ben adsz egy cacheColorHint attribútomot, akkor sokkal többet GC-zik.Tehát ha esetleg állítottál ilyet be, vedd ki.
“All nothings are not equal.”
-
Karma
félisten
Három főbenjáró bűn lebeg a levegőben ennél a történetnél:
1) Fel akarod találni újra a kereket. Rengeteg különböző, de jure vagy de facto szabványos alternatív kódolás van arra, hogy az ilyen karaktereket könnyen olvasható formára hozd, nem kell újon törnöd magad(*). Pl. pofonegyszerű használni az URLEncoder osztályt, vagy a Commons Lang StringEscapeUtils osztályát.
2) Hacsak nem mérési eredményeid vannak arról, hogy a vázolt megközelítésed lassan működik és ez az egykarakteres Stringek miatt van, ne állj neki túlkomplikálni. A premature optimization esete állhat fenn.
3) A Unicode olyan, mint a medve: nem játék. Persze, magyar karakterekkel el tudsz lavírozni akár egy kézi look up table-lel amikor az UTF-8 "konverteredet" írod, de a helyes megoldás bőven meghaladja a "fél délután alatt a garázsban összedobom" szintet. Gondolok pl. a surrogate-ek kezelésére, ami UTF-16-ban két karakter, UTF-8-ban meg pl. három...
(*): Kivéve persze, ha valaki más követte el ezt a hibát egy szerveroldalon, és ahhoz kell idomulnod. Ez esetben tekintsd az első pontot tárgytalannak.
Szóval röviden: ha nincs valami életbevágóan fontos és pontos oka ennek, keress valami más megoldást.
[ Szerkesztve ]
“All nothings are not equal.”
-
Karma
félisten
Pont ellenkezőleg, köszönöm a hosszú okfejtést. Segít jobban kontextusba helyezni a dolgokat
Az utolsó ponton méláztam még egy kicsit, végülis az a leginkább kézzel fogható; nem kell konvertert írnod, ha az OutputStreamWritert felparaméterezed egy encoderrel: Charset.forName("UTF-8").newEncoder()
“All nothings are not equal.”
-
-
Karma
félisten
válasz lordjancso #1204 üzenetére
Azt vágod, hogy az onCreate-ben egy lokális változót hoztál létre, miközben az osztályod tagváltozója soha nem kap (az indító nullon kívül) értéket? Vedd ki az "ArticleAdapter" típusnevet az értékadás előtt.
“All nothings are not equal.”
-
Karma
félisten
válasz lordjancso #1219 üzenetére
Javaslom ezt a StackOverflow kérdést és az elfogadott válaszát megtekintésre. Mivel a TextView adott, csak az ImageGetter interfészt tudnád használni, arra meg ez egy járható megoldásnak tűnik.
Bár én biztosan WeakReference-et raknék el a View-hoz.
[ Szerkesztve ]
“All nothings are not equal.”
-
Karma
félisten
válasz lordjancso #1221 üzenetére
Semmi nagy dologra nem gondoltam, két dolgot változtatnék a példán a rend kedvéért:
1) Ahogy nézem, nem használja fel az URLImageGetter a konstruktorban átadott Contextet, úgyhogy a tagváltozót és a paramétert törölném azonnal. Ha meg mégis kéne, akkor a View-tól kérném el.
2) A container tagváltozója ugyanennek az osztálynak erősen kapaszkodik (hard reference) a View-ba, úgyhogy ha mondjuk a letöltés tíz percig tart, a felhasználó már régen továbbállt mert megunta, akkor se tudja a GC felszabadítani az egész Activityt.
Könnyen elkerülhető, ha a container tagváltozó nem View, hanem WeakReference<View> típusú. Két sort kell módosítani hozzá, és máris nem akadályozza a GC-t – csak le kell ellenőrizni onPostExecute-ban, hogy megvan-e még a View, vagy már vége.public class URLImageParser implements ImageGetter {
WeakReference<View> container;
public URLImageParser(View t) {
this.container = new WeakReference<View>(t);
}
public class ImageGetterAsyncTask extends AsyncTask<String, Void, Drawable> {
URLDrawable urlDrawable;
...
@Override
protected void onPostExecute(Drawable result) {
View c = URLImageParser.this.container.get();
if (c == null) return;
...
// redraw the image by invalidating the container
c.invalidate();
}
...
}
}[ Módosította: doc ]
“All nothings are not equal.”
-
Karma
félisten
válasz lordjancso #1233 üzenetére
Bevallom sose használtam az ImageGetter megoldást, ha HTML-t kellett megjeleníteni, mindig a WebView-t preferáltam. Kicsit keresgélve úgy tűnik, hogy az invalidate hívás tényleg nem rendezi újra a tartalmat.
Workaroundot láttam: a WeakReference<View> helyett WeakReference<TextView>, és az invalidate helyett kell egy c.setText(c.getText()) hívás.
“All nothings are not equal.”
-
Karma
félisten
válasz lordjancso #1236 üzenetére
Az onPostExecute-ban van egy setBounds hívás, azt kell módosítanod úgy, hogy azt csinálja amit szeretnél.
“All nothings are not equal.”
-
Karma
félisten
válasz lordjancso #1238 üzenetére
Hm. Megpróbálhatnád azt, hogy felüldefiniálod a setBounds metódust az UrlDrawable-ben úgy, hogy a tagváltozóba rakott képre is meghívja azt, ugyanazokkal a paraméterekkel.
Mondjuk célszerű azt az esetet is kezelni, ha még null a kép, és majd a jövőben jön létre. Az előző bekezdésben leírt módosításon túl az onPostExecute-ban fel kell cserélned az urlDrawable.drawable = result sort a setBoundsszal, így az új méret mindkét objektumra hat.
[ Szerkesztve ]
“All nothings are not equal.”
-
Karma
félisten
válasz kemkriszt98 #1249 üzenetére
A nullpointerexception alatti stacktrace minden soránál van egy fájlnév és egy sorszám. Ha kettőt kattintasz rá, még oda is visz az Eclipse. Nézd meg, melyik a felülről legelső sor, ami a te kódod, és javítsd ki.
Pl. egy gyanús lehetőség: a layout XML-ben nem, vagy rosszul állítottad be a TextView-k ID-jét, ami miatt a findViewById null értéket ad vissza.
[ Szerkesztve ]
“All nothings are not equal.”
-
Karma
félisten
válasz kemkriszt98 #1256 üzenetére
Mi lenne, ha a layout XML-t és ezt a Java forrásfájlt megosztanád velünk pl. PasteBinen, és akkor nem kéne vakon találgatni?
“All nothings are not equal.”
-
Karma
félisten
válasz SektorFlop #1270 üzenetére
Igen. Mind a kettővel meg lehet csinálni.
Mi a kérdés?[ Szerkesztve ]
“All nothings are not equal.”
-
Karma
félisten
válasz SektorFlop #1272 üzenetére
Példám most nincs, de a lehető legegyszerűbb megoldás az, ha van egy vízszintes LinearLayoutod, a két gyereke szélességét 0dp-re állítod, és a layout_weightet 1-re. Ez a szülő LinearLayout pedig match_parent széles.
Dave-11: A MediaPlayerezést inkább felejtsd el, használd helyette a SoundPoolt. Miután betöltötted a hangokat, a play metódus visszaad egy ID-t, amivel leállíthatod a már játszottat az új indításakor.
[ Szerkesztve ]
“All nothings are not equal.”
-
Karma
félisten
válasz bucsupeti #1292 üzenetére
Regisztrálj Azure fiókot, igényelj ingyenes SendGrid szolgáltatást, és használd a JSON interfészüket az email küldésre. GitHubon van is egy lib hozzá (sendgrid-java). Így teljesen elkerülöd az Androidot és nyomot se hagysz.
Szerk.:
Bocs, nem olvastam végig, hogy nem akarsz külső rendszert bevonni.
Márpedig az email nem így működik, úgyhogy szerintem valamelyik kritériumodból engedni kell.[ Szerkesztve ]
“All nothings are not equal.”
-
Karma
félisten
válasz kemkriszt98 #1298 üzenetére
Float és double típusoknál a nullával való osztás Infinityt ad vissza; ellentétben az egész számokkal ahol kivételt dob.
“All nothings are not equal.”
-
Karma
félisten
válasz RexpecT #1297 üzenetére
Az okozza a félreértést, hogy tettél egy alaptalan feltételezést, ami egyébként elég súlyos is lehet különösen rendszererőforrásokkal kapcsolatban: "az osztály amely implementálja ugye nem adja át a saját interfész referenciáját".
Hogyne tenné? Konkrétan a LocationManagernek kell átadni az interfész referenciát az utolsó paraméterben. Ha megnézed a metódus forrását, az is látszik, ahogy egy HashMapben eltárolja a listenerre mutató hard referenciát. Gyakorlatilag ugyanaz, mint az A-B-C-s példakódod. És ez veszélyes, mert ha nem szünteted meg a regisztrációt, akár Activityk is maradhatnak beragadva a memóriában.
Java alatt "semmi se történik ok nélkül", nincsenek a levegőben röpködő és villámszerűen az objektumaid póznájába becsapódó események (mint lehetne pl. egy JVM szintű publish-subscribe rendszer). Valahol biztosan regisztrálnod kell magad egy konkrét objektumnál.
[ Szerkesztve ]
“All nothings are not equal.”
-
Karma
félisten
válasz lordjancso #1304 üzenetére
A ListView addHeaderView metódusa nem jó erre? Az adapter beállítása előtt hívd meg.
“All nothings are not equal.”
-
Karma
félisten
válasz half333 #1317 üzenetére
Egyrészt még mindig nem mondtad, milyen telefonról van szó; másrészt bár tényleg lehet az Androiddal kapcsolatos közös dolgot ott állítani, azért gyártófüggő is a fájl tartalma; harmadrészt a kérdésedhez a build.propnak vajmi kevés köze van, inkább a a LED-ek előtét ellenállását kéne kiforrasztani és kisebbre cserélni...
[ Szerkesztve ]
“All nothings are not equal.”
-
Karma
félisten
válasz half333 #1320 üzenetére
Jé, most hogy kiderült hogy milyen telefonról van szó, egész gyorsan meg lehet találni Google-lel a megoldást. Még csak kernelt se kell forgatni hozzá, csak root jogok kellenek. De ez már tényleg az Active topikba tartozik.
[ Szerkesztve ]
“All nothings are not equal.”
-
Karma
félisten
Menj be a környezeti változók közé, és vegyél fel két értéket:
1) JAVA_HOME, ami a feltelepített JDK mappájára mutat
2) PATH, ami a JDK-n belüli bin mappára. (Ha már van PATH definiálva, akkor pontosvesszővel elválasztva csapd a végére a JDK bint.)Ezt pl. a Rapid Environment Editorral sitty-sutty meg tudod tenni.
“All nothings are not equal.”
-
Karma
félisten
BROTIP: A bundle-t nem kell telepíteni, csak kitömöríteni.
dmc: Ilyen JNI hibák platformütközéskor szoktak előfordulni leginkább. A biztonság kedvéért vegyük át: 32-bites JDK mellé 32-bites ADT kell, 64-es JDK-hoz meg 64-es ADT. Keverve nem megy.
Egyébként nem szokott általában ez ilyen bonyolult lenni, csak valahol elsiklott valami... Pl. húsz perce raktam az egyik gépemre én is ADT-t, elsőre ment. Az SVN-t több szopás belőni
[ Szerkesztve ]
“All nothings are not equal.”
-
Karma
félisten
Az SQLite nem, de a hozzá való interfész amit a Google ad az SDK-ban mégiscsak az ő saruk .
És elég gyakori az is, hogy van egy bug az Androidban, amit sose javítanak. Most az, hogy lezárták a bugot automatikusan, nem jelenti azt hogy megjavult volna.
“All nothings are not equal.”
-
Karma
félisten
válasz rgeorge #1369 üzenetére
Nem lenne bonyolult, de nem rendeltetésszerű használat. Az alkalmazásoknak odáig szabadna foglalkozni az üggyel, hogy internal vagy external storage – az API is ezt tükrözi. Ha szembemész a rendszerrel, az mindig ilyen taknyolást hoz.
Amúgy mit csinálnál olyan telefonon, ami nem bővíthető SD-vel?
“All nothings are not equal.”
-
Karma
félisten
válasz -PLevi- #1385 üzenetére
Ez inkább az Android alkalmazások topikhoz tartozik, de azért megválaszolom a kérdést ahogy sejtem a helyzetet. Ha megvan az APK, akkor annak visszafejtésével (pl. Virtuous Ten Studio segítségével) és a manifest átírásával elvileg a telepítési korlátot át tudod hágni. Aztán futtatáskor, amint az első magasabb szintű API-t, témát, akármit megpróbál használni, game over.
“All nothings are not equal.”
-
Karma
félisten
válasz kisguly #1421 üzenetére
Ettől még nem programozási kérdés , van nagy tabletes topik és valószínűleg navonos is külön. Persze nem biztos.
Mindenesetre valószínűsítem, hogy valami ilyesmit kéne végigjárnod.A tableten lévő fájl meg ne az eszközön akard megnyitni, inkább másold le és úgy nézz bele desktopon. A név alapján gyanús, hogy nyers pixeladatot tartalmaz tömörítés nélkül -– ha a fájl mérete 2 457 600 byte, vagy ennek fele, szinte biztos.
“All nothings are not equal.”
-
Karma
félisten
válasz RexpecT #1427 üzenetére
ViewPagerben van ez? Mert ha igen, akkor az lehet a kiváltó ok, hogy a VP mindig előre létrehozza a következő N elemet, hogy simább legyen az átjárás.
Egy próbát megérhet, hogy a setOffscreenPageLimitnek nullát adsz meg, elvileg annak le kéne tiltania ezt a viselkedést, cserébe lassabb lesz.
“All nothings are not equal.”
-
Karma
félisten
Alapvetően dialógustípusonként készíts egy osztályt, ne konkrét példányonként, és ezek mind külön fájlba menjenek, hiszen semmi közük egymáshoz. Készítsd fel az osztályt úgy, hogy a szövegek, a gombok feliratai kívülről meg argumentsből is állítható legyen, így mindig be tudod paraméterezni a használat helyén.
Vagy mielőtt feltalálod újra a kereket, nézz rá az AlertDialog osztályra és ha elég, használd azt!
[ Szerkesztve ]
“All nothings are not equal.”
-
Karma
félisten
Önmagában nem kezeli a forgást, de ha DialogFragmenten keresztül használod, mindjárt jobb lesz a helyzet.
“All nothings are not equal.”
-
Karma
félisten
válasz WonderCSabo #1502 üzenetére
Ha csak egy képet kéne így megjeleníteni, a TouchImageView nálunk bevált.
Bonyolultabb tartalommal nem foglalkoztam még, de SO-n van sokféle válasz, hátha van benne valami használható: [1][2]
[ Szerkesztve ]
“All nothings are not equal.”
-
Karma
félisten
1) Igen, újra meg kell hívnod. Célszerű ezt egy metódusba tenned a MainActivityn belül. Az elhagyott könyvtárat meg úgy tudod kezelni, hogy a FileSelectorActivityt indító Intentbe beraksz egy extra mezőt, vagy a data tagját is használhatod (ott URL-t tudsz tárolni). Ezt lekezeled onCreate-ben és szevasz. (Ha támogatsz képernyőelforgatást, akkor egy kicsit bonyolultabb, mert az aktuális állást ki kell mentened.)
2) Ha a fájl elérési útját tudod, mindent tudsz: létre tudsz hozni egy új File objektumot az elérési úttal (van ilyen konstruktor), és onnantól minden megy.
[ Szerkesztve ]
“All nothings are not equal.”
-
Karma
félisten
Hát, ha csak annyiról lenne szó, mint amit az eredeti hozzászólásban felvázoltál, akkor nem lenne egy annyira bonyolult helyzet. Én ebből indultam ki.
A MainActivitynek abban csak három állapota van: üresjárat, file selectorra vár, dialógusra vár. Az állapotok között lehet egyet előre meg hátra lépni, illetve dialógusnál üresjáratban ugrani. A callbackek miatt még csak tárolnod se kell az aktuális állapotot, hiszen teljesen implicit a rendszer szempontjából (lásd: melyik Activity/Dialog van elől). Az állapotátmenetek meg simán leírhatóak a callbackekben, és még csak nem is spagetti, mivel a két bekérés két külön helyre fut be.
Viszont onnantól, hogy mint mondtad, négy beszélgetős "szál" is van, ezeket ki kéne szervezni külön osztályba. Például csinálhatnál egy olyat, ami kapna egy Contextet, implementálná a résztvevő interfészeket, és csak az adott szálat írná le. A végén meg visszajelez, hogy siker (és átadja az URL-t is), vagy hogy cancelezett mindent a felhasználó, és a MainActivity csak ezzel foglalkozna.
“All nothings are not equal.”
-
Karma
félisten
Az előbb hülyeséget írtam, az onActivityResultot nem tudod külön osztályba kiszervezni, hiszen az mindenképpen ott hívódik meg, akin a startActivityForResult metódust hívod...
Miközben írtam azért derengett, hogy ez az "egy folyamatot összefogó osztály" igazából lehetne egy külön Activity, amit a Main elindít. Talán ez lenne a legközelebb az Androidhoz is.
“All nothings are not equal.”
-
Karma
félisten
A FileSelectActivity különválasztása semmiképpen sem volt rossz lépés.
Csinálhatsz olyan Activityt is, amihez nem tartozik UI, ha ezt a témát adod meg neki a manifestben. Ezt indítsa el a Main, az eredményt resultként tudja visszaadni, és egyébként majd akkor finisheli le magát, amikor vagy kimégsézett a felhasználó, vagy mindent kiválasztott.
Szóval valami ilyesmi lehetne a vége:
MainActivity -1-> ImportActivity (translucent) -2-> FileSelectActivity
| ^ | ^ | ^ |
| | | | | \-----3----/
| \----6-----/ | |
| | \-------- 4-> ConfirmationDialogFragment
| | |
| \--------------5-----------------/
|
\--------1*---> ExportActivity (translucent) -2*-> FileSelectActivity...[ Szerkesztve ]
“All nothings are not equal.”
-
Karma
félisten
Elvileg igen, gyakorlatban meg ki kell próbálni Nekem itthon nincs kéznél androidos eszköz.
És igen, menteni csak ID-vel lehet, vagy ha megírod kézzel az onSaveInstanceState/onActivityCreated metódusokban.
Ez szerintem egyáltalán nem egy egyszerű kérdés – több szintű állapot, aszinkronitás, kötött interfészek... Igazi Android programozási gyakorlat. Nagyon "jól" megoldható spagettivel is, ha az ember nem gondolkozik rajta, de akkor már miért ne bontaná szét? Mások véleményére azért kíváncsi lennék.
[ Szerkesztve ]
“All nothings are not equal.”
Új hozzászólás Aktív témák
Állásajánlatok
Cég: Ozeki Kft.
Város: Debrecen
Cég: Promenade Publishing House Kft.
Város: Budapest