Hirdetés
- DUNE médialejátszók topicja
- Amlogic S905, S912 processzoros készülékek
- AMD Navi Radeon™ RX 9xxx sorozat
- Utánajártunk, hogy melyik memória mennyire drágulhat
- OLED TV topic
- Kellemes karácsonyi ünnepeket!
- Kormányok / autós szimulátorok topikja
- HP EliteBook / ZBook topik
- Végleg lemondott a régi gépekről a Steam
- A Windows 11 nem akarja ránk erőltetni az AI applikációkat – vagy mégis?
Új hozzászólás Aktív témák
-
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ó?
-
eastsider
nagyúr
egy dialogFragmentről indítok egy camera intentet.
és ha visszatér, és elfordítom az eszközt, akkor lesz null
szóval, ha alapból visszatér, nem tűnik el, csak, ha elfordítom a képethasználok természetesen, azért furi
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
super.onSaveInstanceState(savedInstanceState);
if (mCurrentPhotoPath != null) {
savedInstanceState.putString(CAPTURED_PHOTO_PATH_KEY,
mCurrentPhotoPath);
}
if (mCapturedImageURI != null) {
savedInstanceState.putString(CAPTURED_PHOTO_URI_KEY,
mCapturedImageURI.toString());
}
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
if (savedInstanceState.containsKey(CAPTURED_PHOTO_PATH_KEY)) {
mCurrentPhotoPath = savedInstanceState
.getString(CAPTURED_PHOTO_PATH_KEY);
}
if (savedInstanceState.containsKey(CAPTURED_PHOTO_URI_KEY)) {
mCapturedImageURI = Uri.parse(savedInstanceState
.getString(CAPTURED_PHOTO_URI_KEY));
}
} -
Karma
félisten
válasz
eastsider
#2196
üzenetére
Ezt most nem sikerült szerintem annyira érthetően megfogalmaznod... Szóval indítasz egy camera intentet, visszatér, elfordul az activity, aminek hatására új példány jön létre belőle és elveszik a lőtt kép?
Mert akkor vagy onSaveInstanceState/onRestoreInstanceState-et kéne használnod (és elmenteni lepusztulás előtt a kapott URI-t), vagy fragmenttel végezni a fotózást.
-
eastsider
nagyúr
Sziasztok!
camera intenttel visszatérve és elforgatva a elforgatásra null imageURI-ra milyen megoldást tudtok?
manifestben: android:configChanges="orientation" eddig ment... -
Karma
félisten
Igen, enélkül a csak-Java alkalmazásokat elég könnyen vissza lehet fejteni. Onnantól a lehetőségek elég tágak... Az ártatlan vizsgálódáson túl lehet sok gonoszságot is művelni, például átírni benne egy-két apróságot, kiiktatni valami házi védelmet, becsempészni egy kis trójait, átnevezni, és kiadni saját (vagy az eredeti) nevén.
4.1-től kezdve elvileg a fizetős alkalmazások már titkosítottak, úgyhogy ha régebbi telefonra meg alternatív csatornákon nem terjeszted a programod, akkor az már biztonságban van.
-
válasz
WonderCSabo
#2193
üzenetére
Köszönöm!

Viszont ha nem élek ezzel a lehetőséggel, akkor - ha jól értem - bárki visszafejtheti az appomat pillanatok alatt. Ennyi erővel open source is lehetne

-
WonderCSabo
félisten
A ProGuard egy bytecode szintű obfuszkáló, optimalizáló és méretcsökkentő eszköz. Az obfuszkáló részének lényege az, hogy az osztályok neveit, metódusak neveit, mezők neveit stb. átnevezi értelmetlen rövid kifejezésekre, mint "a", "a.c.d", stb. Ennek köszönhetően ha visszafordítják is .java fájlokká az appodat, akkor sem lehet egykönnyen kibogozni, mit is csinál pontosan a forrás. De ezt a Google első találat a hivatalos oldal sokkal szebben írja le. A Proguard fizetős verziója a DexGuard, ami picit többet tud.
A ProGuard elsőre nagyszerű dolognak tűnik, de valójában a használatához hozzáértés és rendkívül hosszú konfigolás és tesztelés szükséges, mert az obfuszkáció miatt nagyon nehéz látni, hogy hol csapja szét az appodat. És hidd el nekem - szét fogja csapni.
-
Karma
félisten
válasz
trisztan94
#2187
üzenetére
APK projektként kell kezdened, odáig biztos (az M10 HTC-specifikus témacsomag emlékeim szerint).
A hiba alapján nem adtál neki framework.jar-t - ha fut a GenyMotion, akkor a Remote file gombbal elvileg ki tudja szolgálni magát.
-
trisztan94
őstag
Meglestem Windows-on. Valamiért nem tudom visszafejteni vele az osztályokat, csak néhány .xml fájlt és a képeket.
Próbáltam apk- és m10-projektként is importálni.Ezeket a hibaüzeneteket dobálja:
ScriptManager.SetActiveConfigurationViaName
Can't find script configuration with name: defaultBaseModule.ProcessVariable
hu.trisztan.csakideirokvalamit -> Decompile resources: Empty setting value, name: FrameworkTagÉs csak ennyit kapok vissza, osztályokat nem:
Ez normális? Vagy mit csinálok rosszul?

-
Karma
félisten
válasz
trisztan94
#2185
üzenetére
Ennyire integrált eszközt nem ismerek másik platformokra, mint a VTS. Némely komponense elvileg kézzel is használható, de nem is nagyon erőltettem sose...
Van még egy tool, a dex2jar, ami megy OSX-en is. Ha a jar megvan, onnan meg a JAD-dal tudsz Java forrásra áttérni; de mondjuk az XML-eket nem tudom hogyan nyerheted ki.
Javaslom a Boot Campet vagy virtualizációt

-
trisztan94
őstag
-
Karma
félisten
válasz
trisztan94
#2182
üzenetére
Ja egyébként azt el se árultad, hogy milyen AVD-t hoztál létre. Az csak egy szükséges feltétele a játékodnak, hogy legyen fenn 18-as SDK és system image, de olyan virtuális telefont kell létrehoznod, ami ezeket használja is.
-
Karma
félisten
válasz
trisztan94
#2182
üzenetére
Nem rossz próbálkozás, de nem is célravezető.
Ajánlanám, hogy tedd fel a Virtuous Ten Studio-t, amivel visszafejtheted forráskód szintig az APK-t, valamit a Genymotiont, ami egy VirtualBox alapú, sokkal gyorsabb emulátort ad, Google API támogatással.
-
trisztan94
őstag
Sziasztok!
Kaptam egy .apk fájlt, ami szerint kellene megcsinálnom egy másik platformra az adott appot. Nekem sajnos most nincs androidos készülékem amire telepíteni tudnám, ezért az egyetlen lehetőségem az, hogy emulátorban futtatom.
Első dolgom az volt, hogy kiderítettem a minimum és a target sdk verziókat:
A: android:minSdkVersion(0x0101020c)=(type 0x10)0xe
A: android:targetSdkVersion(0x01010270)=(type 0x10)0x12Ha jól tudom, nekem itt a sor végén lévő hex szám a lényeg, tehát a 0xe és a 0x12, ami 14 és 18 decimálisban. Ezek után megnéztem az Android SDK Managerben, hogy fent van-e valamelyik kompatibilis SDK:
Tehát fent van a 18-as.
Próbáltam telepíteni adb install paranccsal, de ezt a hibaüzenetet kapom:
Failure [INSTALL_FAILED_OLDER_SDK]
Mit csinálok rosszul?

-
Karma
félisten
válasz
bAtt001
#2179
üzenetére
android numberpicker preference
És ezzel a kereséssel találtam is komplett megoldást a problémára.
-
bAtt001
addikt
sziasztok
[link] egy ilyen szám kiválasztót szeretnék tenni a beállítások menümbe, hogy keressek erre rá hogy megtaláljam a leírást hozzá? hirtelen nem találtam róla semmit

-
Karma
félisten
válasz
vazee00
#2176
üzenetére
Sok pénzért van rá céleszköz, de alapvetően könnyen visszafejthető a legtöbb házi offline megoldás (pl. az egy dolog, hogy egy hosszú kulccsal titkosítod a DB jelszót, de utána hova rakod ezt a kulcsot?).
-
vazee00
tag
Tisztelt fórumozók!
Kezdő vagyok még e téren, így segítséget szeretnék kérni. Androidban hogyan oldható meg az adatbázis kapcsolat adatainak titkosítása, hogy minél kevésbé legyen visszafejthető? Főként az adatbázis jelszóra gondolok.
Elég sokat keresgéltem, de valódi, hasznos dolgokra annál kevésbé leltem.Üdv.
-
eastsider
nagyúr
van valami módja a custom dialogfragment title backgroundot megváltoztatni?
megváltoztatom a backgroundot, de a title mögött fehér marad
[link] a kék vonalig fehér marad mindenképp... -
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!
-
_kovi_
aktív tag
válasz
WonderCSabo
#2166
üzenetére
Nem, a res mappában sok minden van. Ha lenyitod pl a values mappát, akkor abban ugye ott a strings.xml, styles.xml. De a layout nem kinyitható...

-
_kovi_
aktív tag
válasz
WonderCSabo
#2159
üzenetére
Nincs benne layout file. Nem is tudod lenyitni a fület.
-
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. -
eastsider
nagyúr
Sziasztok!
egy string arrayben (ami res-ből jön) szeretném megkapni egy adott item indexétfinal String[] aperture_array = getResources().getStringArray(R.array.aperture_array);
for (String s: aperture_array) {
int i = s.indexOf(aperture);
if (i >= 0) {
apertureWheel.setCurrentItem(i);
}
}
de 0-t ad visszahogy kellene ezt?
-
thon73
tag
válasz
WonderCSabo
#2159
üzenetére
Ja, akkor mégiscsak én értettem félre. Nem csoda, hogy nem sikerült megkeverni a gépet... Viszont akkor jól fog működni amit írtam! 
(((Ezt az egyszerű log-ot csak úgy hirtelen készítettem, amikor a még-nem-rootolt tab nem volt hajlandó kiírni a rám vonatkozó system log-ot (AIDE-t használtam külföldön, net nemigen volt). És a feladatát tökéletesen el is látta. Később univerzálissá - pontosabban thread-safe-é akartam tenni, csak megzavart, amiket olvastam: eredetileg is thread-safe volt
)))(((Most meg van egy nagy adathalmazom, amit a program szépen feldolgoz. Arra gondoltam, hogy nem fogom minden csip-csup hibáért leállítani az egész folyamatot, hanem szépen log-olja a hibákat, és csak a végén mondja meg, volt-e hibás (nem importálható) adat. Erre viszont pont kéznél volt ez - a logtól független - secunder log. Egyébként ez tök jól működik, abban nem voltam biztos, hogy minden körülmény között fogja-e ezt produkálni...)))
Hálás köszönet, nem rongálom tovább a kiírást...

-
WonderCSabo
félisten
-
thon73
tag
Tapasztalt guruktól szeretnék segítséget kérni!
Korábban azt mondtátok, (és ezzel a doksi is, meg még én is egyetértünk), hogy egy KÖZÖS file írása több file-ból és több thread-ból veszélyes, mert a kiírt tartalom összekeveredik.Tesztelés szempontjából megpróbáltam ezt elérni, (mármint, hogy a program rossz legyen, és keveredjenek az adatok), és LEHETETLEN! Minden ellenőrzést kivettem, és már nem is Channel-en keresztül próbálkozom (ami elvileg thread safe). Két, teljesen más package nevű program van, mindkettő több szálat futtat. Az adatok mindkét program minden száljáról megérkeznek.
//Nyitás közös
OutputStreamWriter stream = null;
File file = new File( Environment.getExternalStorageDirectory(), "ThreadCheck.log");
stream = new OutputStreamWriter( new FileOutputStream(file, true) );
//Több ilyen thread van:
new Thread(new Runnable() {
public void run() {
try {
for (int n = 1; n < 8000; n++) {
stream.append( "Egyes" );
}
}
catch (Exception e) {
Log.e("THREAD", e.toString());
}
}
} ).start();A kész file az "Egyes", "Kettes" stb. szavakat egyben, épen tartalmazza.
Én értettem félre valamit, vagy ez egy Android tulajdonság, amiben meg lehet bízni?

Vagy hogyan tudom a programot "elrontani", és honnan tudhatom meg az ellenkezőjét: hogy minden körülmény között jól fog működni?Előre is köszönöm!
(((Egy "log" szerű programrészre lenne szükségem: több file, esetleg több thread is ír ugyanabba a file-ba üzeneteket. Az üzenetek sorrendje stb. nem lényeges, csak az, hogy egy üzenet egyben maradjon. Ez ugye megvalósul, csak abban nem vagyok biztos, hogy ez így biztonságosan jó-e.)))
-
_kovi_
aktív tag
Sziasztok!
Egyetemről elhozott elvileg beállított Eclipse-ben nincs új projekt esetén graphics layout.
A oldalt a res-ben a layout tök üres, ki sem nyitható. -
-
eastsider
nagyúr
-
thon73
tag
válasz
kemkriszt98
#2144
üzenetére
MIt jelent, hogy "teljesen rossz helyen"? Rossz kezdőponton v. csak rossz irányban/méretben? Én első körben leellenőrizném az összes értéket log-ban, aztán kiderül...
-
eastsider
nagyúr
ha az activity háttérben van, de fut (onStop), akkor szeretnék csinálni valamit periodikuisan, de csak, ha fut a háttérben, akkor is kell service?
viszont, ha előtérben van az alkalmazás akkor nem kell végrehajtani.
egyébknt URL reload -
eastsider
nagyúr
válasz
WonderCSabo
#2149
üzenetére
köszi!
mindenhol ezt a példányosítást láttam.. ezek szerint lehet ezt normálisan is
az volt a gondom, hogy alapból a show()-val meghívta -
WonderCSabo
félisten
válasz
eastsider
#2148
üzenetére
Miért ne példányosítanád ott? Én nem szoktam ezt a show metódust használni:
Pl. onCreate()
mProgressDialog = new ProgressDialog(this);
mProgressDialog.setCancelable(false);
mProgressDialog.setCanceledOnTouchOutside(false);
mProgressDialog.setIndeterminate(false);
mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);eseményre dialógus kell:
mProgressDialog.show();
-
eastsider
nagyúr
válasz
WonderCSabo
#2146
üzenetére
hmm tényleg

és arra van ötleted , hogy ne az onCreateben kelljen a dialogot példányosítani?
final ProgressDialog pd = ProgressDialog.show(this, null,null, true);
mert így még midnig nem megy, viszont máshogy meg nullokkal elszállKarma: igen.
-
Karma
félisten
válasz
WonderCSabo
#2146
üzenetére
Én úgy értem, hogy app indításonként egyszer kellene letiltani. Azaz a shared pref nem kell, csak egy sima boolean tagváltozó a WebViewClientben.
-
eastsider
nagyúr
Sziasztok!
webViewnél hogy tudnám megoldani, hogy a progressdialog első indításnál ne jelenjen meg?
ugyanis onPageStarted és onPageFinishedben jelenítem meg/rejtem el a dialogot. viszont ez ugye megjeleníti első indításkor is.. nekem akkor pedig egy Splash screen jelenik meg progress DIalog helyett (vagyis jelenne, mert felette jelenik meg a dialog... -
kemkriszt98
tag
Sziasztok, adott ez az osztály, a lényeg, hogy a kód egy másik részén Létrejön egy tömblista Block objektumokkal majd lekérve azok koordinátáit kirajzolja azt... ez így működik is jól rajzolódnak ki ami azt jelenti hogy az x,y koordináták helyesek... viszont ha létrehozok egy Rect-et a koordinátákkal és azt kirajzolom akkor teljesen rossz helyen rajzolódik ki.
Van ötletetek?
*azért nem raktam be a kód többi részét mert ott csak annyi szerepel, hogy canvas.drawRect(...) így itt nem igazán lehet probléma...
**kicsit a koordinátákról a jobb érthetőség kedvéért:
mivel minden négyzet egyforma méretű, úgy oldottam meg a több képernyő méret kezelését, hogy a képernyőt rácsként képzeltem el és ennek a rácsnak ahányadik oszlopában található a négyzet annyiszor a kép mérete a koordináta.
A y = (int) (LevelView.screenBottom - y); azért kell mert alulról felfele rajzolom ki a dolgokat. -
h1ght3chzor
őstag
válasz
h1ght3chzor
#2139
üzenetére
Amit találtam eddig kódok:
// create a server connection
StreamConnectionNotifier notifier =(StreamConnectionNotifier) Connector.open(connectionString);
// accept client connections
StreamConnection connection = notifier.acceptAndOpen();Viszont a 2. sor nem fut le, vki csinált már bluetooth java szervert?!
-
h1ght3chzor
őstag
Sziasztok!
Bluetooth szerver problémám adódott: a probléma az hogy a szerver nem válaszol a kliens socket kérésére, azaz nem acceptálja a bejövő üzeneteket.
A szerver oldalon hogy lehet a bluetooth-t socketként használni?Válaszaitokat előre is köszönöm!
Üdv -
Karma
félisten
válasz
eastsider
#2137
üzenetére
Én nem látok benne semmi igénytelent, sőt ha csak megjeleníted és tárolod az értéket, akkor minden más megoldás felesleges vudu. Komolyan.
Mondjuk ennek megítélésében sokat segítene, ha elárulnád a feladatodat a kiragadott implementációs fennakadásoknál bővebben.
NumberPickerbe stringet tenni nem is tudsz szerintem, nem AdapterView.
-
eastsider
nagyúr
fúha. a második válaszodat még elemzem (annyira nem jött át)
egyelőre számolni nem szeretnék vele (igen lehetne számolni az ISO-Aperture-shutterSpeed párosból. h egyik változtatásakor mi lesz a többi..
viszont ha stringként letárolom nem tudom mennyire számít igénytelennek
egyébként attól függ hány fényértékenként van a beosztást....egyébként a number pickert mennyire illik stringgel feltölteni?
-
thon73
tag
Ha számolni kell, akkor még jobb - durván - számtani sorként tárolni ezeket (Durván: mindig feleződik, de csak kb.) Kis nehézséget jelent a köztes értékek tárolása, mert pl. létezett 1/100 és 1/50 is; nekem pl. a Momettán az volt (1956-ban gyártott készülékről beszélünk)
Mindenesetre az egész érték jelentheti a sorban elfoglalt helyet, azzal (amennyire emlékszem) számolni is lehet. Egy emelés megfelel egy blendének, ugye? Egyúttal megadja a String-Resource érték indexét is.
Bocs, hogy belekontárkodom, de a dolgozat szempontjából nem lenne egy jó ötlet összehasonlítani a kül. tárolási módok előnyeit és hátrányait? Ez uis. egy komoly számítástechnikai kérdés, a többi viszont csak technológia. Pontosabban, hogy mennyire tudsz elevezni az Android hibái és korlátai között. -
thon73
tag
válasz
eastsider
#2133
üzenetére
Én egészként. Mondjuk első két byte egész mp, másik két byte törtrész nevezője, és még mindig van négy byte. Vagy + = egész, - = törtrész, és akkor egy bit jelzi a formát. Vagy: egy byte típus (óra, perc, mp, tört), többi az érték. Vagy memóriapazarló módon: egy mező: érték, másik mező: típus.
De én az elsőket választanám, és csinálnék hozzá egy osztályt. -
eastsider
nagyúr
szerintem is így tiszta, ezzel még nem volt gondom
esetleg a backstack szempontjából nem feltétlenül mindegy, hogy dialog vagy sima fragment. (meg az átláthatóság miatt)más kérdés:
ilyen értékeket hogy tárolnátok db-ben?
[link]
CRUD szempontjából érdekel, nem tudom hogy tudnám megjeleníteni ilyen módon... -
eastsider
nagyúr
-
thon73
tag
válasz
eastsider
#2128
üzenetére
Elvileg már vannak nested-fragment-ek, de support library-val nekem nem ment. Amikor elfordítottam a készüléket pontosan ellenkező sorrendben jelentek meg a Fragmentek - az utolsó dialog volt legalul. ((Ez egyébként bug-ok között szerepel, akkor meg is találtam. Nem tudom, hogy későbbi változatokban javították-e, ott sokan panaszkodtak, hogy nem.))
Én minden eredményt visszaadnék az Activity szintjére és onnan nyitnék meg - akár a még megtartott Dialog tetején - egy új fragmentet. Kicsit játszani kell az adatok ide-oda utaztatásával, de legalább tökéletesen működik.
A másik lehetőség, hogy az egyszerűbb dialogusoknál nem használsz fragmentet. Sztem. annak az egyetlen előnye, hogy újraindításnál megmarad, ez meg nem. -
thon73
tag
No, úgy tűnik, sikeresen beletenyereltem valamibe, ami messze meghaladja a tudományom. Ami megnyugtat: nem csak az enyémet. Tanulás céljából ajánlom a következő cikket: [link]; szerencse h. az említett professzor volt olyan kedves, és a pórnépnak is csinált biztonságos osztályokat...
Kibogoztam az ArrayAdapter source-kódját is. A konstruktorban megadhatjuk a felhasználni kívánt ArrayList-et, melyet = jellel tárol a belső változóban.
Ezt követően a Filter() rész pont azt csinálja, amit én: lock-olja a belső változó hozzáférését, és végigolvassa a tömböt (pontosabban átmásolja egy másikba). Ez azonban NEM szinkronizált cselekedet, uis. időközben egy másik programrész (akár UI szálon,mert a Filter worker-szálon van!) módosíthatja az eredeti tömböt. Vagy összeomlik, vagy exception-t kapunk. A saját változatomban (belassítottam a filtert) sikerült is a hibát produkálni.
Ált. persze nem lesz hiba, egyszerűen azért, mert a Filter (ha egyáltalán használjuk), sokkal gyorsabban lefut, semmint változna közben a tömb. De ha a Filter lassul - akkor máris előjöhet a hiba, még a legegyszerűbb listában is. Az én problémám nyilván szélsőséges (túl nagy a lista), és valójában a filtert nem is akartam használni (pont a lassúsága miatt), de a logikai hiba az akkor is logikai hiba.
Elvi megoldást úgy találtam a magam számára, hogy készítek egy ArrayList leszármazottat, amit a Loader fel tud tölteni, távolról változtatható - de csak akkor, ha a Filter nem állítja le a működését. Pl. úgy, hogy a filter teljesen más metódussal vesz ki elemeket; ha a tömb változik, akkor ez a lehetőség lezárul, úgyis megváltozott a szűrni kívánt anyag.
Gondoltam, megosztom a gondolataimat, hátha mást is érdekel ez a kérdés. De, mint fent írtam, ez kicsit több, mint amit biztonságosan átlátok, így aztán ha hülyeséget gondolk, kérlek, javítsatok!

-
eastsider
nagyúr
Sziasztok!
mennyire illik egy dialogFragmentből meghívni egy másikat?
egy dialogon csak gombok lesznek (update,del, cancel),
szóval updatenél hogy lehetne ezt megoldani? vagy inkább legyen az update egy fragmenten?
esetleg onClickre megjeleníteni ugyan azon a dialogon az updatehez szükséges UI elemeket? -
eastsider
nagyúr
válasz
Peter789
#2125
üzenetére
lehet inkább xda-n kellene kicsit utánanézned a dolognak, űgy léátszik itt senki nem aktívkodik ebben a témában... esetleg Slukkicanak megereszthetsz egy privit, ő foglalkozik kernel fejlesztéssel N4-re
-
thon73
tag
Egy kis olvasás után jobban meg tudom fogalmazni a kérdésem:
A BaseAdapter legnagyobb része UI szálon fut, tehát használhat a program többi részével közösen egy olyan ArrayList-et, amit a többi rész is csak UI szálon módosít.
A BaseAdapter egyúttal Filterable is lett, vagyis tartalmaz egy Filter.performFiltering metódust, ami viszont egy Worker thread-en dolgozik, ÉS olvassa a fenti ArrayList adatokat.
Én úgy látom, hogy csak a Filter.performFiltering területén kell védenem ezt a közös ArrayList-et a módosítástól.
Mi lenne erre a leghatékonyabb módszer? ((Vehetünk két helyzetet is: kis méretű és extra nagy méretű listák, ahol a filtering is sokáig tarthat))
Vagy valamit teljesen rosszul értek?Természetesen az osztálynevek a felmenőket jelentik, mindegyikből van saját.
-
Karma
félisten
válasz
eastsider
#2122
üzenetére
Az UIL anomáliát elvileg az okozza, hogy az adapter újrahasznosította a view-t még azelőtt, hogy a képkérés lefutott volna, a régi kérés pedig még mindig fut. Próbáld meg explicite leállítani az UIL-t, ha a convertView nem null.
ImageLoader.getInstance().displayImage(null, image);
A másik kérdést nem igazán értem, miről szól.
-
eastsider
nagyúr
válasz
eastsider
#2120
üzenetére
megy is a cucc szépen. memória fogyasztás megtöltött adatbázissal (képekkel) 15mb. tényleg egyszerű használni
lepucoltam és full újratelepítettem....még csinál furcsaságokat az UIL (felcseréli gyors scrollozásnál az első és utolsó képet), de biztos csak a configgal kell játszani, vagy valamit nem jól inicializáltam.
nagyon szuper gyors....már csak a backStackkel, és a wheel-lel kell megküzdenem
egyébként az mitől lehet, hogy dualPane módban hozzáadás után felkerül a listába a mező, singlePane módban pedig a lista full eltűnik?
-
thon73
tag
Bocs, van egy elég kezdő kérdésem, de nem nagyon értem...
Egy BaseAdapter alapú Adapter külső adatokra hivatkozik. Amit private-ként tárol, azok nem maguk aza adatok, hanem csak egy mutató a távoli adatokra. (ListArray mérete kb. 200 ezer elem)
Ha valaki megváltoztatja az adatokat (mármint a tömb marad, csak hozzáad v. elvesz), akkor a notifyDatasetChanged()-del tájékoztat arról, hogy újra kell rajzolni a ListView-t. Eddig nincs is talán gond.
DE!
Ha a háttérben elindul a Filter, akkor az a távoli adatokból végez egy leválogatást. Hogyan tudom megakadályozni, hogy a leválogatás közben kívülről megváltozzanak az adatok?
Jól sejtem, hogy a synchronized( lock ) ((ahol lock egy sima private osztály-objekt)) csak a saját osztály által elkövetett változtatásoktól véd?Vagy hogyan illik ezt megcsinálni? A gyári ArrayAdapter csinál egy komplett másolatot az összes adatról, mielőtt elkezdené leválogatni. Ez nem túl idő- és munkaigényes?
Vagy mi a jó út erre? Előre is köszönöm!
-
eastsider
nagyúr
egyelőre simán betöltötte a loader az imageviewekbe
szóval ez tuti fogyaszt...
illetve jelenleg palceholdernek a drawable-ből az app ikonja van benn, ami még fogyaszthat...
ahogy Karma írja UIL ezt mindet intézi, vagyis a seggünk alá rakja
egyébként úgy néztem, hogy háttérfolyamatban evett 200mb-ot az app, de akkor tuti a képek miatt.. mindjárt tolok egy tesztet kikommentezve azt a részt (úgyis törölni kell)
most néztem genymotionben 10mb körül volt a fogyasztása, lehet hogy csak a custom ROM miatt van ez?
jah... fals riasztás volt... genymotionbe akármit csinálok 11mb-ot eszik (4.4.2, N5) (végigmentem az összes listán)VAAGY... telefonomon a futtatási környezet ART-on van..
-
Karma
félisten
Vagy bele se fog, hanem rábízza magát és a képkezelést az UIL-ra, miközben egy jó konfigurációt ír hozzá a GitHub oldal alapján.
eastsider: Azt, hogy a képek okozzák-e a memóriabajt, könnyen ki tudod próbálni a favágó módszerrel. Azaz kommentezd ki azt a sort, ami az ImageViewt tartalommal tölti meg, és úgy mérj még egyet.
-
thon73
tag
válasz
eastsider
#2116
üzenetére
Jah, pont ezt. De akkor rendben is vagy: 68 Kb.
Valószínűleg valahol tárolja a képeket. Lehet h. már várnak az eltakarításra, gondolom azt is beleszámolja. Azt kell végiggondolnod, hogy a betöltött képekkel mit csinálsz? Ha mindig újratöltöd, akkor a lista minden soránál tölteni meg számolni fog.
Jelenleg a Loader semmit se csinál a képekkel, csak a szöveget tölti be. Az adapter tölt képet.
Az elvileg megoldható, hogy a loader betöltse a képet, de nem javasolnám, mert macera.
Inkább azt kéne megoldani, hogy az adapter egy hátsó szálon töltse a képet. Pl.: Adapternek szüksége van egy képre, akkor azt a hátsó szál lekicsinyíti, és menti egy cache-be. Ha ott megvan, akkor persze adapter csak beolvassa. Hogy miként lehet a konkrét listaelemet frissíteni, ha kész a töltés, azt még nem látom át. De ez csak egy hirtelen ötlet volt - mindenesetre valahogy szét kell választani a csigalassú részeket, meg eldönteni a memória vs. idő kérdést. Alighanem ehhez most papír meg ceruza kell inkább, s csak aztán a kódírás... ha szabad javasolnom. -
Peter789
senior tag
Sziasztok! Lévén hogy keresztfordítás, remélem jó helyen járok a kérdésemmel. Bár OpenWrt-hez már sok kernel modult fordítottam, illetve kisebb programokat magam is írtam már, de az Android világában picit el vagyok veszve, még új nekem... Adott egy eredeti "Star HD5000" csájnafón 4.2.2-es Androiddal, 3.4.5-ös kernellel, MT6582 quad procival. Ezen a telefonon szeretnék kernel modulokat pótolni - pl USB soros adapterekhez. Ehhez meg kellene találni a telefon saját SDK anyagát, vagy valami általánosabb pakk is jó lesz hozzá?
-
eastsider
nagyúr
SQLite Debuggerrel mit keressek?
a táblák rendben vannak, csak szöveg van bennükalkalmazás mérete 1.93Mb, Adatok 68Kb.
tuti a kép betöltése a listViewba kavart be
mekkora egy ilyen alkalmazás normális étvágya?
lehet az is gond lehet, hogy (teszt miatt), túl sokszor indítom a loadert -
thon73
tag
válasz
eastsider
#2114
üzenetére
Na, akkor jókora bug-ot kell keresni

Két-táblás content-provider 8-8 szöveges, többmezős adattal: 44 Kilo(!)B; Alkalmazás 1,09 MB
Feltölthetem próbaként bármekkorára, de már ebből is látszik, h. nagyságrendi különbség van.
Van egy olyan progi, h. SQLite Debugger, azzal meg tudod nézni, h. mi a pálya az adatbázis-fileban. ((Több ilyen van, lehet, h. van még jobb is. Ja, root kell, de úgy tudom, az van.))Bocs, megnéztem a linket is: az első az az. Szerintem a bindView megértéséhez nem kell feltétlenül "képes" alapból kiindulni, de persze lehet, csak az nagyon összetett a megértéshez. Na, ez szép magyar! De a lényeg mégiscsak ez.
-
thon73
tag
válasz
eastsider
#2112
üzenetére
Ööö. Nézz körül az SO-n egy egyszerűbb példáért, mert neked NEM ez fog kelleni. Ez BaseAdapter-t bővít, a tiednek CursorAdapter alap kell!!!
A "deprecated" cuccból hiányozni fog az utolsó paraméter, de ahhoz küldj listát, és akkor lehet látni, h. hol a bibi.
A képfeldolgozó programok ált. cachelik a thumbnail-eket, (úgy láttam), különben lassú. De ebben nincs tapasztalatom. Elvileg a méretnek sem lenne szabad nagynak lennie, hiszen csak szöveget tárolsz. Hol nézted? Alkalmazásinfo méretben? -
eastsider
nagyúr
köszi
lehet lesz még kérdésem pofátlanul
közbe kilegoztam, hogy muszáj lesz custom adapter...
godnolom valami példához hasonló:
[link]és a loadernek a saját adapteremet adom át ugye? (a simpleCursorAdapter helyett)
és megint jön az, hogy az adapter konstruktora deprecated...
ez mennyire gázos dolog amúgy?Karma: igen, az imagepath-t tárolom SQLiteban (szerintem ez nem gázos megoldás....
hát igen, úgy megeszi a N4 hw-ét így egy full fellbontású kép betöltése a listába...egyébként az mitől lehet, hogy a content providert implementáló alkalmazásom memóriaigénye nem kicsi?
14-30mb között poroszkált, de ha megnyitok egy olyan listát, ahol több képet is megjelenít a lista (persze nem UIL-el), 170 megát evett
-
thon73
tag
válasz
eastsider
#2108
üzenetére
Loaderben most eléggé otthon vagyok...

De szerintem Neked nem a Loader rész fog kelleni. Az adapter nem is tud a loader-ről, a loader csak betolja az adatokat az adapterbe.
Szerintem custom CursorAdapter-re lesz szükséged, amiben a bindView() metódust kell átírnod (lehet h. a newView.t is, ill. biztos). A bindView paraméterként tartalmazza a Cursor-t, ezt felhasználva tudod a képet megjeleníteni.
A Loader tehát csak át fogja adni a kikeresett Cursor-t (Még URL-t tartalmaz) az adapter-nek, és az adaptert kell úgy módosítani, hogy az URL-t bármilyen módon is, de feldolgozza.((Ez egyébként pont ugyanaz, mint, amit WonderCSabo írt; csak az a BaseAdapter alapú adapterekre vonatkozik, ott a getView-t, itt a bindView-t kell változtatni. Kicsit más a technika, de az elv ugyanaz: egy listaelem megjelenítését az adapter végzi az adatok alapján.))
-
eastsider
nagyúr
válasz
WonderCSabo
#2105
üzenetére
igaziból az a gondom, hogy loaderrel dolgozom, és nem tudom, hogy tudnám visszaadni a UIL-nek azt az image Uri-t, amin épp a cursor áll...
-
eastsider
nagyúr
válasz
WonderCSabo
#2105
üzenetére
ez tényleg egyszerű

nem gondoltam volna, köszi!
-
WonderCSabo
félisten
válasz
eastsider
#2102
üzenetére
Azért nem annyira bonyolult ez... Neked van egy adaptered. Tökmindegy milyen adaptered. Ennek az elemei tartalmaznak egy url-t. Na az adaptered getView() metódusában átadod az ulr-t és az imageview az UIL-nek, ahogy mondtam. Az UIL nem csinál mást, mint csak letölti a képet és megjeleníti, etc. A kép URL-jét és mindent Neked kell természetesen előállítani.
Karma: Ezt nem is ismertem, bár én ProgressDialogot használok úgyis, mert több infót is meg kell jeelníteme. De ez jó cucc.
-
thon73
tag
válasz
WonderCSabo
#2101
üzenetére
Aha. Ez ugyan nem sqlite, csak sima Loader, de a hiba pont ugyanott van!
Aki Loader-t akar csinálni annak ITT egy jó előadás; de a lényeg az első hozzászólásban van:
"Important: I no longer recommend to use a Loader for "one-shot" actions because it's complicated and has a few side-effects."
No ezen én is elgondolkodtam...
Ettől függetlenül az ea. nagyon jó, és csomó buktatót (pl. a Loader mindig kétszer tüzel...) felsorol; de speciel a filteres gond (vagyis hogy a filter a még fel nem töltött adapterből szed ki adatot, aztán a felülírja vele a már betöltötteket) nem szerepel benne.
Még küzdök vele egy kicsit...Aprópopo: Hogy a betöltés alatt egy karika forogjon, azt meg lehet valami egymondatos gyári utasítással oldani, vagy azzal is nekem kell játszani?
-
eastsider
nagyúr
válasz
WonderCSabo
#2101
üzenetére
ehhez kell egy saját cursorAdapter, jól értem? vagy nem feltétlenül?
honnan tudja a UIL, hogy a megfelelő elemet húzza be a listába a megfelelő elemhez?bocsi, ha hülyeségeket kérdezek, de nem sikerült egyelőre kibogoznom teljesen a dolgot

-
WonderCSabo
félisten
válasz
eastsider
#2099
üzenetére
Igen, a UIL behúzza a képet, tökmindegy honnan hívod meg, csak a UI szálról legyen.
thon73: Én anno dolgoztam egy projekten, és én is a loderekkel szívtam. Végül mi lett a megoldás? Kidobtama loadert a kukába, mert nem volt időm kibogozni a nem dokumentált viselkedését. Lehet, hogy valamennyire hasonlít a Te problémádhoz, olvasd el.
Új hozzászólás Aktív témák
- PlayStation 5
- One mobilszolgáltatások
- DUNE médialejátszók topicja
- EAFC 26
- Epic Store Ünnepi Ajándékozás - 7. nap: The Callisto Protocol
- Amlogic S905, S912 processzoros készülékek
- Windows 11
- Bond tovább pihen, késik a 007 First Light
- Intel Dual Core 2000 felhasználók barátságos offolós topikja
- Samsung kuponkunyeráló
- További aktív témák...
- HIBÁTLAN iPhone 14 128GB Red -1 ÉV GARANCIA - Kártyafüggetlen, MS3159
- Bomba ár! Lenovo ThinkPad X280 - i5-G8 I 8GB I 256SSD I 12,5" FHD Touch I HDMI I Cam I W11 I Gari!
- Gamer PC-Számítógép! Csere-Beszámítás! I3 14100F / RTX 3060Ti / 16GB DDR5 / 1TB SSD
- ÚJ Lenovo ThinkPad T16 Gen 4 - 16" WUXGA - Ultra 7 255U - 32GB - 1TB SSD - Win11 - 3 év garancia
- Samsung Galaxy S25 Edge Titanium Jetblack 12/256 GB Használt, karcmentes 6 hónap garancia
Állásajánlatok
Cég: Laptopszaki Kft.
Város: Budapest
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest









)))



szóval ez tuti fogyaszt...


