Hirdetés

2024. április 28., vasárnap

Gyorskeresés

Hozzászólások

(#1401) SektorFlop válasza thon73 (#1396) üzenetére


SektorFlop
aktív tag

SQLite a specialitásom

SELECT a._id, b._id FROM aTable AS a LEFT JOIN bTable AS b ON (a.col1 = b.col2)

Ha jól értem valami hasonló kell neked, de ha megírod pontosan mi kell többet tudok segíteni.

"Amikor már azt hittem kint vagyok, ezek mindig visszarántottak..."

(#1402) fatal` válasza SektorFlop (#1401) üzenetére


fatal`
titán

Szerintem neki inkább (nem tudom SQLiteban megy-e, ms sqlezek, azt is inkább csak alapszinten, egyelőre):

SELECT a.id AS a_Id, b.Id as b_id FROM a LEFT JOIN b ON b.a_id = a.id

Utána a Cursorral tud a_Id-ra és b_Id-ra hivatkozni.

[ Szerkesztve ]

(#1403) kisguly


kisguly
tag

Sziasztok!
Olyan kérdésem lenne a szakértő Urakhoz, hogy az ES File Explorer alatt a ?-s fájlok mivel nyithatók meg? Szövegként sikerült, de az teljesen érthetetlen. Találtam ugyanis a system\media\image alatt bootlogo nevű fájlt. Ezt szeretném megnézni.

(#1404) thon73 válasza fatal` (#1402) üzenetére


thon73
tag

Köszönöm mindenkinek! A lényegi kérdés pont az, amit hunfatal tett fel (Cursor oldal), a SektorFlop által feltett (query oldal) sem triviális, de ott működtek a teljes nevek.

Az elméleti kérdés érdeklődőknek továbbra is fennáll :) : miért dob exception-t, ha a Cursor oszlopaira teljes névvel akarok hivatkozni ((azt a választ, hogy azért mert nem teljes névvel azonosítja az oszlopokat, már tudom, de: miért van így??)) ÉS ha exception-t dob (a log-ban piros sorok), akkor hogyan mehet tovább? Na de ez csupán filozófia.

A konkrét kérdést így próbáltam ki:

String[] projection = new String[] {
BooksTable.FULL_ID,
AuthorsTable.FULL_NAME + " AS N ",
BooksTable.FULL_TITLE + " AS T " };

CursorLoader cursorLoader = new CursorLoader(getActivity(),
BooksTable.CONTENT_URI,
projection,
BooksTable.FULL_SEARCH + " like ? ",
new String[] { "%"+filterString+"%" },
AuthorsTable.FULL_NAME + " COLLATE LOCALIZED ");

ahol:

case BooksTable.DIRID:
// Set the table
queryBuilder.setTables( BooksTable.TABLENAME +
" LEFT OUTER JOIN " + AuthorsTable.TABLENAME +
" ON " + BooksTable.FULL_AUTHOR_ID + "=" + AuthorsTable.FULL_ID );

A FULL_ jelenti a teljes azonosítót table.column formátumban. Ellenőrzés log-ban:

"Cursor cols: " + Arrays.toString( data.getColumnNames()

Eredménye:
Cursor cols: [_id, N, T ]

Vagyis: az AS a cursor oldalon is működik! Arra persze figyelni kell, hogy egy _id oszlop maradjon! Én egyébként ezt megkerülve minden oszlopnak más nevet adtam előtte, ill. a két _id-t (csak ellenőrzésre kellett) oszlopszám alapján kérdeztem le. De ez a módszer sokkal jobb ((és ezt a problémát nem találtam még sehol a neten, biztos mindenki rögvest tudta...))

SektorFlop! Az nagyon jó hír, biztosan fogok még kérdezni ezret. Egy egyszerű adatbáziskezelőt készítgetek, próbaként könyvek/szerzők stb. feljegyzésével, de a végső cél egy beteg-adat kezelő alkalmazás.
Egy átfogó kérdésem rögtön lenne: nagy szükségem van export/import funkcióra. Kapcsolt adatbázisoknál van-e erre valami elegáns v. beépített módszer? Magamtól úgy terveztem megoldani, hogy exportnál a hivatkozott elem részeit is kiírom, importnál pedig megkeresem, van-e ilyen elem, és úgy hivatkozok rá, vagy ha nincs - létrehozom. A nem kapcsolt táblák már jönnek-mennek!

((Ha esetleg valaki még meg tudná mondani, hogyan lehet a LogCat-ot vágólapra másolni az Eclipse-ben, akkor kissé könnyebben tudnám ide másolni a releváns részeket. A mentés/keresés/megnyitás/másolás egy kissé macerás...))

[ Szerkesztve ]

(#1405) fatal` válasza thon73 (#1404) üzenetére


fatal`
titán

Azért van így, mert így írták meg, ez valószínűleg le van dokumentálva. Amúgy is szokás elnevezni az oszlopokat :)

"és ezt a problémát nem találtam még sehol a neten, biztos mindenki rögvest tudta.."
Mert nem jól kerestél, egyébként ez totál alap SQL :)

Az AS nem kurzor oldalon működik, hanem az SQL szerver (jelen esetben maga a telefon, mivel sqlite) eleve az adott oszlopnévvel adja vissza a lekérdezés eredményét, így a valódi oszlopnévről a cursornak fogalma sincs.

[ Szerkesztve ]

(#1406) thon73 válasza fatal` (#1405) üzenetére


thon73
tag

:B Bocsánat a pongyola fogalmazásért! Igazad van, a "cursor oldallal" csak azt akartam kifejezni, hogy az eredmény oldalán. Azóta kipróbáltam, az android-tól független sqlite "csonkolja" az oszlopneveket.
A legtöbb nehézségem egyébként abból fakadt, hogy megtanultam valamit sqlite-ban, működött is; de nem tudtam átfogalmazni az android/java által elgondolt módra. Mindegy, most már egyre jobban kitapasztalom...

(#1407) lordjancso


lordjancso
senior tag

Nem tud valaki egy elegáns megoldást arra, hogy hogyan ellenőrizzem le, hogy a szerver él-e, amihez async kéréseket szeretnék intézni az alkalmazásban? Szerintem a legjobb lenne, minden async kérés doInBackground metódusában.
Pár megoldást már megpróbáltam (stackoverflow-n amit találtam), de elegánsnak egyik sem volt igazán nevezhető. Ami meg egyszerűnek és jónak tűnt, az vagy csak 2.x-en, vagy csak 4.x-en működött.

Rip and cut and mutilate the innocent, his friends, and again and again and on and on.

(#1408) Sianis válasza lordjancso (#1407) üzenetére


Sianis
addikt

Ez nem nyerő?

Sianis

(#1409) lordjancso válasza Sianis (#1408) üzenetére


lordjancso
senior tag

Az a baj, hogy az isReachable metódus először ICMP aztán TCP protokollokon akar ellenőrizni és ez nem minden készüléken támogatott.

Rip and cut and mutilate the innocent, his friends, and again and again and on and on.

(#1410) SektorFlop válasza thon73 (#1365) üzenetére


SektorFlop
aktív tag

Én még tartozom egy kóddal ha jól emlékszem :) Még mindig nem oldódott meg a problémám, bár azóta nem is néztem még rá.

Szóval, a problémám ugyebár az volt, hogy egyik fragment-en töltögetek egy táblába dolgokat, a másikon pedig meg akarom azt jeleníteni. De a két fragment közötti váltogatáskor az ArrayList-em bővül az új objektummal, de a ListView nem épül újra.

Fragment1:
Kitöltjük az űrlapot és gombnyomásra hozzáadjuk az új objektumot, ezzel nincs is baj, bár lehetne még finomítani.

if(v.getId() == R.id.btnAddAmount) {
String title = etTitle.getText().toString();
amount = Float.valueOf(etAmount.getText().toString());
int cat = spCategory.getSelectedItemPosition();
DatabaseHelper db = new DatabaseHelper(getActivity());
CostItem c = new CostItem(0, title, amount, cat, status, null, (int) salaryPercent, 1);
db.newCostRow(c);
CostModel.CostItems.clear();
cm.setCostItem();
}

Fragment2:
onCreate-ben létrehozok egy ArrayList-et és onCreateView-ban létrehozom magát a listát.

adapter = new CostArrayAdapter(
getActivity(), R.layout.cost_row, ids);
listview.setAdapter(adapter);

ArrayList:

CostModel cm = new CostModel(getActivity());
cm.setCostItem();

CostModel:

public static void LoadModel(int id, String title, float amount, int category_id, int status, String date, int percent, int salary_id) {

CostItems.add(new CostItem(id, title, amount, category_id, status, date, percent, salary_id));

}

public void setCostItem() {
cost_id = db.getCostID();

for(int id : cost_id) {
CostModel.LoadModel(id,
db.getCostItem(id, CostTableStatic.rCOST_TITLE),
Integer.parseInt(db.getCostItem(id, CostTableStatic.rCOST_AMOUNT)),
Integer.parseInt(db.getCostItem(id, CostTableStatic.rCOST_CATEGORY_ID)),
Integer.parseInt(db.getCostItem(id, CostTableStatic.rCOST_STATUS)),
db.getCostItem(id, CostTableStatic.rCOST_DATE),
Integer.parseInt(db.getCostItem(id, CostTableStatic.rCOST_PERCENT)),
Integer.parseInt(db.getCostItem(id, CostTableStatic.rCOST_SALARY_ID)));
}
}

Így ahogy másolgattam a kódot találtam benne fura dolgokat, amiken lehetne módosítani, pl. Fragment1-nél felesleges clear-ni a CostItem-et és újra létrehozni, elég lenne csak meghívni a LoadModel-t.

Remélem elég információt bemásoltam, a ListView újraépítése nincs benne mert csak gyenge próbálkozásaim voltak, nem tudom hogy mi lenne a megfelelő megoldás ebben az esetben.

"Amikor már azt hittem kint vagyok, ezek mindig visszarántottak..."

(#1411) thon73 válasza SektorFlop (#1410) üzenetére


thon73
tag

Amikor megnyomod a gombot, akkor a db.newCostRow(c); betölti az adatokat egy adatbázisba. Két sorral később a cm.setCostItem(); "visszatölti" az adatokat az ArrayList-be?
Hogy fér hozzá a Fragment1 a cm listához?
Itt történik a megjelenítendő lista feltöltése?
Mert ha igen, akkor a bibi valahol a két Fragment kezelésében lesz. Ha itt lecserélted a komplett listát, akkor itt kellene értesítened az Adaptert vagy a ListView-t, hogy változott a helyzet. De a Fragment - elvileg - közvetlenül nem férhet hozzá egy másik Fragment adataihoz (különösen nem a ListView-hoz).
Ha a Fragment1 változtatja az adatokat, akkor neki "üzennie" kéne az Activity-n keresztül, hogy Fragment2 frissítse a listát. Vagy. Fragment1 csak bekéri és átadja az adatokat, majd üzen Fragment2-nek (aki a listát is tartalmazza), hogy a bekért adatokkal frissítse az ArrayList-et is, és a listát is.
De lehet, hogy csak bennem nem állt össze, bocs.

(#1412) SektorFlop válasza thon73 (#1411) üzenetére


SektorFlop
aktív tag

Igen jól látod a db.newCostRow(c); betölti az új sort, ezután az ArrayListába is betölti. Az adatfeltöltés és minden velejáró dolog jól működik, kivéve a fragment2 lévő ListView újraépítése.

Tegnap próbálgattam az onFocusChange (fragment-ek lapozgatásánál lefut ez az esemény) eseményre meghívtam:
setAdapter() - nem történt semmi a listával
notifyDataSetChanged() - nem történt semmi a listával

Gyanítom hogy valami apró dolgot rontok el, plusz ráadásul az is lehet hogy teljesen rossz oldalról közelitem meg a problémát.

"Amikor már azt hittem kint vagyok, ezek mindig visszarántottak..."

(#1413) thon73 válasza SektorFlop (#1412) üzenetére


thon73
tag

Írtam egy kis programot hozzá. EZT vettem alapul. És ITT a bővített program zip formában.

A teljes arraylist-et az outputFragment kezeli. Amikor az inputFragment-en beírsz, az értéket elküldi az Activity-nek, az Activity pedig továbbküldi az outputFragment-nek. Ez utóbbi írja be a list-be, és frissíti a listát.

A Te esetedben nem az activity, hanem a db hordozza az adatot. De az array-t szerintem a listfragmentnek kéne kezelnie (vagy az activity-nek).
A lényeg: MINDENKÉPPEN jeleznie kell az inputFragmentnek a ListFragment irányába, hogy új elem érkezett!! Ezt nem fogja (szerintem) beépített on... metódus megtenni, neked kell megcsinálni. VAGY: a LOader osztály már megcsinálja "magától".

A példa globális adapter változót használ, de a getListAdapter() is jó, csak a típusát módosítani kell (uis. nincs benne notifyDataSetChanged)

public void refreshOutput( String data )
{
// 1. érdekes: ez is működik
// lista.add( data );

// 2. adapter írja be - azonnal kiírja
// adapter.add( data );

// 3. invalidateviews - azonnal működik
// lista.add( data );
// getListView().invalidateViews();

// 4. notify
lista.add( data );
adapter.notifyDataSetChanged();
}

A fenti kódban váltogasd a kommenteket, de szerintem nem ez a baj, hanem a ListFragment nem kap értesítést. ((Hogy az 1. példa miért működik, azt nem tudom, annak nem lenne szabad. :) ))

Ja, igen. A forgatás (újraindítás) törli a listánkat, de most nem is ez volt a feladat. Neked meg a db úgyis megmarad.

Remélem segítettem

[ Szerkesztve ]

(#1414) SektorFlop válasza thon73 (#1413) üzenetére


SektorFlop
aktív tag

Köszi az ötletet, estefele lesz időm foglalkozni vele. Visszejelzek majd, hogy mire jutottam.

"Amikor már azt hittem kint vagyok, ezek mindig visszarántottak..."

(#1415) unknownerror


unknownerror
tag

Sziasztok!

Főiskolás vagyok és kaptam egy összetettebb feladatot. Soha nem programoztam még androidra, bár tanultunk c,c++,c#-ot, de egyikből se egetrengetően sokat, "meglepetés" ez a feladat.

A lényege: ezt kellene valahogy megjeleníteni a programomban, ráadásul 2.3.3-tól működjön. Van .swf változata is ennek, de azzal se jutottam többre.

Órákat gugliztam, félretettem, megint próbálkoztam, de sehogy se jön össze a kivitelezés.
4.1.2 van a telefonomon, a gyári böngésző megnyitja, de még erre se tudom összehozni saját programmal, bár nagy a valószínűsége, hogy én bénázok valamit.

(#1416) WonderCSabo válasza unknownerror (#1415) üzenetére


WonderCSabo
félisten

Ha csak annyi a programnak a feladata, hogy megjelenítse a weboldalat, akkor egy WebView-val megteheted.

(#1417) unknownerror válasza WonderCSabo (#1416) üzenetére


unknownerror
tag

Webview-val szórakoztam egész nap, az a bajom szerintem, hogy javás ez a panorámás cucc, amit csináltak. Többféle formátumban elküldte a készítő, de egyszerűen nem tudom rávenni a cuccot, hogy menjen. Persze nagy a valószínűsége, hogy én rontok el valamit. Jah belső tárhelyről kell, hogy betöltse ezt, nem tudom, hogy számít-e valamiben.
Szinte mindig adobe flash, css, html5 nincs támogatva hibát kapom, de a telefonomon egy-két variációban betölti, viszont akkor jobbra-balra ha lépkedek, fehér lesz, meg néha egy csíkban megjelenik a kép, szóval nem az igazi.

Hozzáteszem, a tárgy neve mobilkommunikáció, direkt nem szoftverfejlesztőnek szakosodtam, hanem hálózati mérnöknek, gondoltam jó lesz ez a tantárgy, erre android programozás, jól meg...szivattam magam. :O
Ráadásul a 26főből kb 2-en álltunk neki a programnak, ismerős sincs, aki értene ehhez

[ Szerkesztve ]

(#1418) TheProb


TheProb
veterán

Ola!

Van itt olyan mágus aki keni-vágja az android appokat?
Van egy app amit csak bizonyos telfonokkal lehet használni, lehetséges-e szerintetek, hogy megpimpelhető-e úgy, hogy ezt a készülékkorlátozást valahogy kijátszam?
Az .apk megvan, forráskód nincs.

"Boba is Mickey, Mickey is Boba" - Finkle Einhorn | PC Rig: https://pcpartpicker.com/b/bBy48d

(#1419) kisguly


kisguly
tag

Szép estét!
Szeretném lecserélni a tabon a bekapcsoláskor bejövő első képet, ami általában a készülékre utaló kép. Nagy valószínűséggel a kernelben van. Ha a recovery-t indítom akkor is bejön. Milyen néven találom ezt a képet és hol? Milyen progival tudok csinálni másikat?
Előre is köszönöm a segítséget. :R

(#1420) Karma válasza kisguly (#1419) üzenetére


Karma
félisten

Tudom mostanában gyakran válaszolom ezt, de ez nem ebbe a topikba való, hanem a tableted konkrét topikjába. A pontos típust egyébiránt nem ártott volna leírni.

“All nothings are not equal.”

(#1421) kisguly válasza Karma (#1420) üzenetére


kisguly
tag

Bocsánat! Teljesen igazad van.
Csak sajnos az az igazság, hogy ehhez a tablethez nagyon kevés (semmi) dolgot lehet találni.
Navon Explorer 3g.
És ez egy kicsit más mint a Navon Explorer.
Ezért próbálkozom az érdeklődéssel ebben a topikban.

(#1422) Karma válasza kisguly (#1421) üzenetére


Karma
félisten

Ettől még nem programozási kérdés :U, 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.”

(#1423) kisguly válasza Karma (#1422) üzenetére


kisguly
tag

Köszönöm a segítséget!
Sajnos semmit sem találni a tabról. Azért még próbálkozgatok egy kicsit.

(#1424) SektorFlop válasza thon73 (#1413) üzenetére


SektorFlop
aktív tag

Végre eljutottam odáig, hogy megnézzem a kódot amit küldtél. Valószínüleg ez megoldja a gondomat, de sajnos nem otthon vagyok így nem tudom saját kódomba kipróbálni.

Annyi hogy nekem a fragment2 nem listfragment. Hanem egy sima fragment és abban van egy listview.

[ Szerkesztve ]

"Amikor már azt hittem kint vagyok, ezek mindig visszarántottak..."

(#1425) thon73 válasza SektorFlop (#1424) üzenetére


thon73
tag

Az a lényeg szempontjából mindegy. Az első példa sem list-tel operál.
Szívfájdítóul: én se vagyok otthon, viszont most éjjel is majd 30 fok van, ráadásul a tengerre néz az ablak... de hogy nekem se legyen olyan jó, holnap nyakig öltönyben előadás ;]

[ Szerkesztve ]

(#1426) half333


half333
őstag

Sziasztok! Akárhol is kérek segítséget,nem írnak semmit,hát felteszem itt is! Olyan gondom van hogy a telefon érzékeli a memóriakártyám,de pc-re csatlakoztatva,nem lehet elérni,bármit is próbáltam,igy belenyúltam a system/etc/vold.fstab-ba többféle módszert is kipróbáltam,de ugyszint semmi,esetleg (mivel tudtok programozni,megmondanátok hogy elég csak ott átírni a dolgokat,vagy a system-en belül még máshol is lehet a baj? Léci,ha tudtok segítenétek,mert így elég bonyolúlt a másolgatás :(((

(#1427) RexpecT


RexpecT
addikt

Üdv!

Fragmenteket használok, és az utolsó Fragment megnyitásakor egy másik Activityt akarok betölteni Intent segítségével.
Az utolsó előtt Fragment megnyitásakor 1-2 másodperc elteltével automatikusan meghívódik az utolsó Fragmentben deklarált Intent. Ez mitől lehet? :R

[ Szerkesztve ]

(#1428) Karma válasza RexpecT (#1427) üzenetére


Karma
félisten

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.”

(#1429) RexpecT válasza Karma (#1428) üzenetére


RexpecT
addikt

Igen abban van :R . Én is arra gondoltam, hogy előre betölti, és ezért lehet lassabb ( most jutott eszembe, hogy logolni kellett volna és akkor kiderül :B ). Inkább teszek oda egy gombot, minthogy a sebesség csökkenjen :)

(#1430) half333


half333
őstag

Vagy ha nem tudtok,legalább megírnátok hol keressem azt ahol tudnak segíteni ebben?

(#1431) lordjancso


lordjancso
senior tag

Csináltam egy ListView-t, aminek a tartalmát egy mysql adatbázis alapján töltöm fel.
Lekérem az elemeket json-ban, parse-olom, majd megjelenítem. Teljesen tiszta sor.
Emulátorban tökéletesen működik minden, viszont a teszt telefonomon (Samsung Galaxy S3, gyári 4.1.2-es android) nem mindig tudta betölteni a tartalmat. Ez a "nem mindig" azt jelenti, hogy 10-15 próbálkozásból csak egyetlen egy alkalommal tölti fel a ListView-t a json alapján.
A json parse-olás try-catch blokkban van. A hiba során az exception.getMessage() azt mondja, hogy
Unterminated object at character 2054 of [{"id": ........
A ... rész ugye a teljes feldolgozandó json stringben. Ezt úgy értelmeztem, hogy a 2054. karakter nem tetszik neki, viszont az egész json-om nincs 1200 karakter hosszú.
Találkozott már valaki hasonló jelenséggel? Van valami ötletetek erre a problémára?

Rip and cut and mutilate the innocent, his friends, and again and again and on and on.

(#1432) SektorFlop válasza thon73 (#1425) üzenetére


SektorFlop
aktív tag

Ma van egy kis időm, így megpróbáltam betenni a kódomba az általad küldött példát. De a OnInputReadyListener interface-el gondok vannak.

11-20 18:48:19.035: E/AndroidRuntime(1343): FATAL EXCEPTION: main
11-20 18:48:19.035: E/AndroidRuntime(1343): java.lang.ClassCastException: ---.MainActivity@a6f044c8 must implement OnInputReadyListener
11-20 18:48:19.035: E/AndroidRuntime(1343): at
---.fragment.FragmentMainPage1.onAttach(FragmentMainPage1.java:63)
11-20 18:48:19.035: E/AndroidRuntime(1343): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:867)
11-20 18:48:19.035: E/AndroidRuntime(1343): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1088)
11-20 18:48:19.035: E/AndroidRuntime(1343): at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
11-20 18:48:19.035: E/AndroidRuntime(1343): at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1444)
11-20 18:48:19.035: E/AndroidRuntime(1343): at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:461)
11-20 18:48:19.035: E/AndroidRuntime(1343): at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:141)
11-20 18:48:19.035: E/AndroidRuntime(1343): at android.support.v4.view.ViewPager.populate(ViewPager.java:1064)
11-20 18:48:19.035: E/AndroidRuntime(1343): at android.support.v4.view.ViewPager.populate(ViewPager.java:911)
11-20 18:48:19.035: E/AndroidRuntime(1343): at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1432)
11-20 18:48:19.035: E/AndroidRuntime(1343): at android.view.View.measure(View.java:15172)
11-20 18:48:19.035: E/AndroidRuntime(1343): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4814)
11-20 18:48:19.035: E/AndroidRuntime(1343): at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1390)
11-20 18:48:19.035: E/AndroidRuntime(1343): at android.widget.LinearLayout.measureVertical(LinearLayout.java:681)
11-20 18:48:19.035: E/AndroidRuntime(1343): at android.widget.LinearLayout.onMeasure(LinearLayout.java:574)
11-20 18:48:19.035: E/AndroidRuntime(1343): at android.view.View.measure(View.java:15172)
11-20 18:48:19.035: E/AndroidRuntime(1343): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4814)
11-20 18:48:19.035: E/AndroidRuntime(1343): at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
11-20 18:48:19.035: E/AndroidRuntime(1343): at android.view.View.measure(View.java:15172)
11-20 18:48:19.035: E/AndroidRuntime(1343): at android.widget.LinearLayout.measureVertical(LinearLayout.java:833)
11-20 18:48:19.035: E/AndroidRuntime(1343): at android.widget.LinearLayout.onMeasure(LinearLayout.java:574)
11-20 18:48:19.035: E/AndroidRuntime(1343): at android.view.View.measure(View.java:15172)
11-20 18:48:19.035: E/AndroidRuntime(1343): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4814)
11-20 18:48:19.035: E/AndroidRuntime(1343): at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
11-20 18:48:19.035: E/AndroidRuntime(1343): at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2148)
11-20 18:48:19.035: E/AndroidRuntime(1343): at android.view.View.measure(View.java:15172)
11-20 18:48:19.035: E/AndroidRuntime(1343): at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1848)
11-20 18:48:19.035: E/AndroidRuntime(1343): at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1100)
11-20 18:48:19.035: E/AndroidRuntime(1343): at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1273)
11-20 18:48:19.035: E/AndroidRuntime(1343): at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:998)
11-20 18:48:19.035: E/AndroidRuntime(1343): at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4212)
11-20 18:48:19.035: E/AndroidRuntime(1343): at android.view.Choreographer$CallbackRecord.run(Choreographer.java:725)
11-20 18:48:19.035: E/AndroidRuntime(1343): at android.view.Choreographer.doCallbacks(Choreographer.java:555)
11-20 18:48:19.035: E/AndroidRuntime(1343): at android.view.Choreographer.doFrame(Choreographer.java:525)
11-20 18:48:19.035: E/AndroidRuntime(1343): at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:711)
11-20 18:48:19.035: E/AndroidRuntime(1343): at android.os.Handler.handleCallback(Handler.java:615)
11-20 18:48:19.035: E/AndroidRuntime(1343): at android.os.Handler.dispatchMessage(Handler.java:92)
11-20 18:48:19.035: E/AndroidRuntime(1343): at android.os.Looper.loop(Looper.java:137)
11-20 18:48:19.035: E/AndroidRuntime(1343): at android.app.ActivityThread.main(ActivityThread.java:4745)
11-20 18:48:19.035: E/AndroidRuntime(1343): at java.lang.reflect.Method.invokeNative(Native Method)
11-20 18:48:19.035: E/AndroidRuntime(1343): at java.lang.reflect.Method.invoke(Method.java:511)
11-20 18:48:19.035: E/AndroidRuntime(1343): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
11-20 18:48:19.035: E/AndroidRuntime(1343): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
11-20 18:48:19.035: E/AndroidRuntime(1343): at dalvik.system.NativeStart.main(Native Method)

[ Szerkesztve ]

"Amikor már azt hittem kint vagyok, ezek mindig visszarántottak..."

(#1433) SektorFlop válasza SektorFlop (#1432) üzenetére


SektorFlop
aktív tag

Én buta, mindent szépen megcsináltam, csak valahogy elfelejtettem implementálni az interface-t az activity-hez... pedig úgy emlékeztem hogy azzal kezdtem, így azt nem is nagyon nézegettem... :W

"Amikor már azt hittem kint vagyok, ezek mindig visszarántottak..."

(#1434) thon73


thon73
tag

Van két-három nagyon hasonló osztályom, legyenek Class A, Class B és Class C. Mindegyikben van egy-egy newInstance() metódus, a korábban javasolt Static Factory Method szerint. (Az útmutatásért ismét köszönet és hála :R )

Arra gondoltam, hogy az azonos részeket kiemelem egy közös "szülő-szintű" abstract osztályba, melynek neve Class Template. Így a három osztály csak egész kevés kódot fog tartalmazni (csak amennyi különböző bennük), és rendre Class A extends Template... stb. módon hivatkoznak a Template osztályra.

A kérdésem a következő: Létre lehet-e hozni a static newInstance() metódust is az abstract Template osztályban úgy, hogy az egyes leszármazott osztályok (Class A, B és C) örököljék, de az ezeken a leszármazott osztályokon meghívott newInstance() a saját osztály példányát adja vissza?

Vagyis:

abstract class Template {
static ???? newInstance() {
return ????;
}
}

class A extends Template {
}

után az A.newInstance() az A osztály egy példányát adja vissza??
Eddig annyit gugliztam ki, hogy ez az Abstract Factory Pattern-be tartozik, de a konkrét kérdéssel kapcsolatban csupa ellentmondást találtam.
Nagyon hálás lennék, ha valaki ezt röviden el tudná magyarázni! Köszönöm!

SektorFlop! Most működik? :)

(#1435) WonderCSabo válasza thon73 (#1434) üzenetére


WonderCSabo
félisten

El lehet fedni a statikus metódusokat, ergó csinálhatsz olyat A.newInstance() egy A példányt adjon vissza, B.newInstance() pedig egy B példányt, de ennek sok előnye nem lenne, azon kívül, hogy egységesen kezeled a neveket. Hogyha öröklődést, és ezekhez kapcsolódó fogalmakat, működéseket, szeretnél, akkor felejtsd el a statikus függvényeket. Az abstract factory valóban jó ötlet arra, hogy ha a legyártást akarod kiszervezni. Itt egy nagyon egyszerű példa van leírva, és Javában megvalósítva, ebből tutira érthető lesz. De akár a Factory method is használható erre a célra. Sőt, a Builder is, bár a példák között talán ez a legbonyolultabb.

Szerk.: Egyébként ez a kérdés inkább a java programozás topikba tartozik. Sőt még akár az általános Programozás topikba is lehetne, mivel a patternek bmilyen nyelven műkődhetnek, de mivel a Java implementáció is érdekes, a Java topik lenne a legjobb.

[ Szerkesztve ]

(#1436) SektorFlop válasza thon73 (#1434) üzenetére


SektorFlop
aktív tag

Igen működik, mikor megtaláltam a hibát. megnéztem az onFocus-al is és úgy is frissíti a listát, nem azzal volt a baj, hogy az outFragment-em nem kapott értesülést róla. Az array adapteremet rontottam el egy csöppet. :)

És azt hiszem még nem köszöntem meg a segítséget, szóval nagyon szépen köszönöm . Megpróbálom valahogy viszonozni, a segítséget és a rám szánt időt. :)

"Amikor már azt hittem kint vagyok, ezek mindig visszarántottak..."

(#1437) thon73 válasza WonderCSabo (#1435) üzenetére


thon73
tag

Köszönöm a segítséget, és a sok olvasnivalót! Megint sokat tanultam, és legalább látom, hogy jó irányban kezdtem tapogatózni. :)
Helyesebb lett volna talán a teljes problémát leírni (és ez absz. android): Egy összetett adatbázisban több, egymásra hivatkozó tábla van. Class A,B,C... mindegyike egy egy táblához tartozó ListFragmentet jelent. ((És van egy hasonló, "űrlap" szerű csoport is táblánként.)) A ListFragment legtöbb része (Loader, Filter, kommunikáció az activityvel) azonos, de a táblára vonatkozó részek, egy-egy menüpont azért különbözik. Ezért gondoltam egy "közös" template szülő absztract osztályra.
Az Activity csak a Fragmentek kezelését végzi, az ő szempontjából elég annyi, hogy ez egy Fragment, a részletek (leszármazások) nem érdekesek.
Nos, ezért gondoltam arra, hogy a newInstance is közös lehetne - csak épp itt nem látom, hogy melyik al-osztályból kellene példányt készíteni.
Amit olvastam, annak alapján a newInstance mindig az al-osztályba kerül, így én is ezt a megoldást fogom követni. Elfér ott az a három sor...

To SektorFlop:Örülök, ha működik! Az idő meg úgyis körbe-körbe visszajön - nekem is rengetegen/rengeteget segítettek! Üdv!

(#1438) WonderCSabo válasza thon73 (#1437) üzenetére


WonderCSabo
félisten

A newInstance nehezen lehet közös, hiszen ha jól értem abból egy Fragment példánnyal térsz vissza. Továbbá a newInstance egy példányt ad vissza, méghozzá az adott osztályból egy példányt, akkor hogy lehetne az ősben, vagy bárhol máshol, mint a saját osztálya? Illetve még egy dolog: az OO szemléletben egy fontos dolog, hogy a szülőnek nem nagyon szabad tudnia a gyerekeiről... Ha valami közös működést akarsz a Fragment legyártása során, akkor azt tedd meg az ősosztály konstruktorában, és hívjál rá a gyerekekben super hívással. Ha ennél bonyolultabb kell, akkor válaszd az egyik linkelt megoldást, a statikus fv-t meg feletjtsd el ebben az esetben.

[ Szerkesztve ]

(#1439) thon73 válasza WonderCSabo (#1438) üzenetére


thon73
tag

Igen, én is így csináltam végül, köszönöm a segítséget. ((Sőt, a nagyon kevés különbözőséget mutató osztályokból készítettem egy Factory-t (ha jól értelmeztem a leírásokat); hiszen ott csak "belső" különbségek vannak, kivülről (pl. az activity felől) mindegyik csak egy típusos ListFragment.))

Hadd legyek mégis az ördög ügyvédje. Ha az osztály absztrakt, akkor csak a leszármazottakon keresztül valósulhat meg, nem? Akkor sem tudhat a gyerekeiről? Pontosabban csak absztrakt metódusokon keresztül írhatja elő, hogy mit csináljon meg a leszármazott? Teszem azt, szükségem lenne egy állandóra (pl. a LOADER_ID-re, amelyik minden leszármazottban egyedi). Vagy a leszármazott osztály nevére/példányára, mint az előbbi példában (amit egyébként tanácsodra elvetettem). Annak alapján, amit olvastam, a kérdés költői, mert úgy tűnik, nem tudhat. Csak épp nekem ez nem tűnik logikusnak. De elfogadom, hogy így van, és bocs, hogy tudatlanságból kötözködöm. :B

Az útmutatást pedig tényleg nagyon köszönöm, mert most nem csak működik a kód, de "szép" is. :)

(#1440) WonderCSabo válasza thon73 (#1439) üzenetére


WonderCSabo
félisten

Szia!

Az absztrakt osztály a tervezés eszköze. Nyilván az absztrakt metódus egy előírás a gyerekek számára, amelyet teljesíteniük kell. De itt nem is erről van szó. Itt arra gondoltam, ha úgy írod meg az ősosztály implementációját, hogy számít arra, hogy ezt a gyerek a majd így fogja csinálni. Vagy még rosszabb, az osztály hívatkozik a gyerekire - például a newInstance egy gyerek példányt ad vissza.

(#1441) thon73 válasza WonderCSabo (#1440) üzenetére


thon73
tag

Na, én pont ebbe a hibába estem bele mielõtt kérdeztem. :(((
Illetve estem volna, ha az Eclipse engedi...

(#1442) WonderCSabo válasza thon73 (#1441) üzenetére


WonderCSabo
félisten

Na, én pont ebbe a hibába estem bele mielõtt kérdeztem. :(((

A hszeidből sejtettem, hogy ezt szeretnéd, nem véletlenül írtam ezt a példát. :)

Illetve estem volna, ha az Eclipse engedi...

Már hogy ne engedné? Ez teljesen szabványos Java kód:

A.java

public class A {

public static A newInstance() {
return new B();
}
}

B.java

public class B extends A {

}

(#1443) thon73 válasza WonderCSabo (#1442) üzenetére


thon73
tag

Akkor csak a tanulság kedvéért. Vigyázat mindenki csukja be a szemét, hibás kód következik!

public ABSTRACT class A extends ListFragment {

public STATIC ListFragment newInstance() {
return new ??getClass??();
}
}

public class B extends A {
}

public class C extends A {
}

Az ötlet az volt, hogy B.newInstance() létrehoz egy B példányt, melyet ListFragment-ként visszaad, míg C.newInstance() létrehoz egy C példányt, melyet szintén ListFragmentként ad vissza.
Ha a tényleges példány csak az abstract, mint minta alapján jönne létre, akkor a kérdőjeles rész mindig a példány osztálya lenne. De persze ez nem működik, legalábbis a static metódusban nincs ilyen hivatkozás. Nem staticban egyébként a this így működik, mentségemre legyen mondva.

Utólag látom, hogy az egész hibás ötlet volt. (Tegyük még hozzá: newInstance minden esetben egy hosszabb Bundle-t hoz létre, ezért merült fel az ötlet.)

(((Azt már tényleg csak ezer zárójelben teszem hozzá, hogy a leszármazott osztály nevét meg lehet szerezni, és lehet ilyet körülményesen mégis gyártani, de a javasolt megoldás sokkal átláthatóbb, és kényelmesebb.)))

Remélem senkit nem bosszantottam azzal, hogy csupán a tanulság kedvéért helytelen kódot szemeteltem a fórumba. :N Én nagyon sokat tanultam a javaslataidból, hála és köszönet! :R

(#1444) half333


half333
őstag

Használja valaki a Cyanogenmod 10.2-t? Az lenne a problémám hogy a kapacitív alsó gombok világítása nagyon gyenge. Tudna vaki adni tanácsot,segítséget hogyan tudnám növelni a fény erejét?

(#1445) doc válasza half333 (#1444) üzenetére


doc
nagyúr

Ez NEM Android programozas, raadasul mar feldobtad a topicban korabban is. Legy szives a MEGFELELO topicban feltenni a kerdest!

(#1447) RexpecT


RexpecT
addikt

Üdv!

Olyan kérdésem lenne, hogy Google Cloud Consoleban, mikor meg kell adni a alkalmazás csomagnevét( Maphez, vagy GCM-hez), és az általam készített alkalmazás több csomagba van szervezve, ilyen módon:

hu.xy.a
hu.xy.b.c.d
hu.xy.b.d

.. stb

Akkor elég a csomag nevének a hu.xy -t megadnom(tehát a "közös részt")?

:R

[ Szerkesztve ]

(#1448) WonderCSabo válasza RexpecT (#1447) üzenetére


WonderCSabo
félisten

Azt kell megadnod ami az AndroidManifest package attribútumaként fel van tüntetve.

(#1449) RexpecT válasza WonderCSabo (#1448) üzenetére


RexpecT
addikt

Köszöntem :R .

(#1450) thon73 válasza WonderCSabo (#1442) üzenetére


thon73
tag

Kedves WonderCSabo! (ill. kedves mindenki!)

Még egy utolsót szeretnék kérdezni, mielőtt végképp feladom a küzdelemet... :W Az előző megoldások tökéletesek, ki is próbáltam őket, - csak éppen (List)Fragment-nél nem működnek. Ott ugyanis úgy kell elkészítenem a kódot, hogy ÜRES Konstruktorral újra elkészíthető legyen a Fragment.
Problémám a következő: Teljesen egyforma ListView-k (és ListFragmentek) jelenítik meg egy adatbázis különböző tábláit. Az eltérés néhány (6-7) paraméterben van: LoaderId, projection, from, to, content_uri stb.; maga a kód mindig azonos.

Mi lenne a legjobb módszer arra, hogy egyetlen ListFragment osztály tartalmazza a kódot, és minden táblához ebből - más paraméterezéssel - egy külön ListFragmentet készítsen? Tényleges paraméterezés nem használható, az üres konstruktor miatt. Két ötletet kínlódtam ki: vagy abstract metódusokkal kényszerítem ki a "paraméterek" átadását a leszármazottakban, vagy az argument Bundle-be teszem bele egy-egy konkrét ListView-ban a paramétereket.

Nem létezik, hogy ne lenne erre valami pofonegyszerű megoldás, csak sehogy nem találom. :(((
Előre is köszönet minden hasznos ötletért!

Copyright © 2000-2024 PROHARDVER Informatikai Kft.