Android app: ha a Button ID-je nem üres, az app induláskor összeomlik

Android app: ha a Button ID-je nem üres, az app induláskor összeomlik
2022-02-13T19:23:11+01:00
2022-02-15T00:43:37+01:00
2022-10-15T21:20:35+02:00
XtraP
Android programozásban teljesen kezdőként (évtizedes Delphis/Lazarusos múlttal) egy pici appot írok (Android Studio-ban), amely egy főképernyőről indulva két Button valamelyikének koppintására egy-egy újabb képernyőt nyit meg (és ott egyenleteket tud megoldani, de ez bizonyára irreleváns).

A főképernyő gombjainak paraméterezésével semmi gond, minden működik, azonban ha az al-képernyők bármelyikére Button-t helyezek, akkor az app csak akkor működőképes, ha e Button ID paraméterét üresen hagyom. Bármilyen (amúgy szabályos) ID megadása esetén az app már induláskor összeomlik: a főképernyő bevillan, aztán (emulátor esetén) jön a hibaüzenet, amelyből egyszer még indíthatok (természetesen ismét sikertenül), aztán kilép; eszközön indítva csak a bevillanás látszik. Ez akkor is fennáll, ha a gombhoz semmilyen esemény nincs rendelve.

A programocska ettől még működik (mármint ha a jelzett ID-ket törlöm), de ez akkor is nonszensz, hisz adott esetben azonosítanom kellhet a programban bármelyik Button-t. (A főképernyő gombjainak és az app minden egyéb objektumának van élő ID-je, és megelégedésre működnek.)

Hol követem el a hibát?
Mutasd a teljes hozzászólást!
Nem futtattam meg es biztosan nem is tudom a valaszt, de en ebbe az iranyba indulnek el:

Probald meg a QuadActivity-ben lecserelni a Button onClick metodusanak a nevet. Lehet azzal megvaditod a dolgokat, hogy a parent activityben is ugyanezen a neven hivatkozol ra. 

Biztosan probaltad, de Clean es rebuild volt-e mar? 

En mondjuk ezt a fajta megoldast nem preferalom, hogy az xml-be irjuk a metodus nevet, de megprobalhatnad a regifajta hagyomanyos modszerrel is, pl:

phoneCountryButton = findViewById(R.id.phoneCountryButton) phoneCountryButton?.setOnClickListener { // TODO }
Mutasd a teljes hozzászólást!

  • Kod, crashlog? Mert igy konnyu a valasz, a hiba a kododban van a 29. sorban :)
    Mutasd a teljes hozzászólást!
  • A válasz, úgylehet, könnyű - de hibás. :) ("Reméltem, igaz, mert viccnek elég rossz.")

    A kódom 4 db Kotlin fájl, a leghosszabb sincs 300 sor. Egyik 29. sorában sincs olyasmi, ami. (Nem, nem vettem komolyan, amit írtál ...) Persze valahol valami hiba nyilván van. 

    Ezzel szemben ha az alképernyő Activity*.xml fájljában (amely tehát nem az "én kódom") az említett gomb adatai között (amelyeket tehát nem én írok oda) megjelenik az "android:id="@+id/whatever" sor (amelyet speciel tökmindegy, hogy én, vagy - a Design ablak nyomán - az IDE tesz oda, és amelyben a whatever a jelek szerint tényleg bármi lehet), a program induláskor összecsuklik. Ha a sort kiveszem (az IDE-n keresztül törlöm az ID-t vagy direktben az xml-sort), a program indul és dolgozik. (Ez az egyetlen változtatás a két állapot között.) A kérdésem feltevésekor arra gondoltam, hogy ebbe talán más is belefutott.

    A logcat/catlog tippjét mindazonáltal köszönöm.
    Mutasd a teljes hozzászólást!
  • Mellékelem, amit fontosnak találok.

    A Logcat.pdf fájl az Android Studio beépített moduljával, 'Error' beállítással készült. Ha az ominózus sort kiveszem (vagy az IDE Design ablakában törlöm az ID-t, activity_quad.xml, 122. sor), az 'Error' kapcsolóval készült logfájl üres, és a program vígan fut.
    Mutasd a teljes hozzászólást!
    Csatolt állomány
  • Nem futtattam meg es biztosan nem is tudom a valaszt, de en ebbe az iranyba indulnek el:

    Probald meg a QuadActivity-ben lecserelni a Button onClick metodusanak a nevet. Lehet azzal megvaditod a dolgokat, hogy a parent activityben is ugyanezen a neven hivatkozol ra. 

    Biztosan probaltad, de Clean es rebuild volt-e mar? 

    En mondjuk ezt a fajta megoldast nem preferalom, hogy az xml-be irjuk a metodus nevet, de megprobalhatnad a regifajta hagyomanyos modszerrel is, pl:

    phoneCountryButton = findViewById(R.id.phoneCountryButton) phoneCountryButton?.setOnClickListener { // TODO }
    Mutasd a teljes hozzászólást!
  • Győzelem! :)

    a) Az OnClick-metódusok névcseréje jogos (figyelmetlen voltam; bár elvileg kétségkívül nem okozhat gondot, de ha odafigyelek, biztosan nem egyforma nevket adok), de a nevek megváltoztatása nem változtatott semmin. (A QuadActivity és CubicActivity képernyők felépítése hasonló - ezért az előbbi többesszám -, csak az egyik másodfokú, a másik harmadfokú egyenletek megoldására készült.)

    b) Clean és Rebuid volt már, valóban, Sőt, a netes kapirgálás nyomán még egy 'Invalidate Caches'-t is indítottam. Semmi hatás.

    c) a metódusnév kiszerelése az xml-fájlból és az OnClick becserélése OnClickListener-re az általad adott minta alapján: segített! 

    Nagyon nem látom még át az Android osztályok egymásraépülését és az app indulási folyamatát, de a jelek (Logcat ...) szerint tuti, hogy olyasmi lehetett a hiba oka, hogy valamiért (ami az OnClick metódussal kapcsolatos) még a Create előtt hozzá akart nyúlni a Button-okhoz, ha már ID-jük van. 



    Köszönöm a segítséget, jár a megfejtői cím! :)
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd