Swedroid Forum | Nordens största Android-community

Gå tillbaka   Swedroid Forum | Nordens största Android-community > Android - Allt om Android! > Utveckling och projekt > Apputveckling

Svara
 
Share Ämnesverktyg Sök i det här ämnet Visningsalternativ
Gammal 2012-04-01, 12:59   #1 - (Permalink)
crazyrobban
Youth Droid
 
crazyrobbans avatar
 

Reg.datum: dec 2009
Ort: Göteborg
Inlägg: 559

Operatör: Telia
Telefon: Samsung Galaxy S4
ROM: Google Edition ROM 4.4.2

Launcher: Google Home
Tablet: Transformer Book Trio


Launcher: Nova Launcher
Tack: 43
Tackad 30 ggr i 23 inlägg
Standard Dialogfönster och int-konvertering

Hej,

Jag sitter i Eclipse och har slitit mitt hår i ett par timmar nu.
Mest för att jag tror det är ett väldigt enkelt problem.

Appen ser ut som följande:

Användare trycker på en knapp, upp kommer en dialogruta med ett "EditText" fält och en "Ok" knapp. Jag vill att det användaren skriver i fältet ska skickas till en INT variabel. Först körde jag helt enkelt det här:
Min_INT_Variabel = R.id.mitt_edit_text_fält och värdet blev fullständigt galet.
Sen försökte jag med allehanda Integer.parseInt och valueOf, för att inte tala om getText().ToString() och det kraschar bara min app ständigt och jämnt.
Som jag förstått det från ca. 20 olika sidor på nätet, så handlar det om att värden i dialogrutor är på separerade från huvudaktiviteten?

Det andra problemet, är att jag kan bara öppna den här dialogrutan en gång.
Den "byggs" så att säga i min onClickListener, och det vore skönt att slippa skriva en funktion för den, kan jag på ett enkelt sätt riva dialogrutan när användaren trycker "ok" så den kan byggas upp på nytt nästa gång användaren trycker?
Logcat om dialogproblemet:
"java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first."

Tacksam för all hjälp jag kan få, detta driver mig till vansinne!
__________________
Android Timeline
HTC Hero, HTC Desire, HTC Desire HD, LG Optimus 3D, HTC Sensation, Samsung Galaxy Note, HTC One X, Xperia Z, Samsung Galaxy S4, HTC One (m8)

Senast redigerad av crazyrobban den 2012-04-01 klockan 13:01.
crazyrobban är inte uppkopplad   Svara med citat
Gammal 2012-04-01, 14:45   #2 - (Permalink)
Buzz
Professional Droid
 

Reg.datum: maj 2010
Inlägg: 2 131










Tack: 35
Tackad 152 ggr i 127 inlägg
Standard

R.id.mitt_edit_text_fält är id för editboxen, inte innehållet i den. Du behöver leta upp editboxen med findView(R.id.mitt_edit_text_fält) eller något sånt. Och sedan kan du fråga den om dess innehåll. Du får då en sträng och den behöver du sedan göra om till heltal med parseInt.
__________________
Har stängt av att visa både signatur och avatar eftersom de mest används störande och förvirrande. Tycker jag.
Buzz är inte uppkopplad   Svara med citat
Gammal 2012-04-01, 21:23   #3 - (Permalink)
crazyrobban
Youth Droid
 
crazyrobbans avatar
 

Reg.datum: dec 2009
Ort: Göteborg
Inlägg: 559

Operatör: Telia
Telefon: Samsung Galaxy S4
ROM: Google Edition ROM 4.4.2

Launcher: Google Home
Tablet: Transformer Book Trio


Launcher: Nova Launcher
Tack: 43
Tackad 30 ggr i 23 inlägg
Standard

Jag förstår problematiken lite bättre nu efter ytterligare en timmes hårslit.

Säg att jag deklarerar mitt edit text fält globalt.
EditText fält;

Följer sedan upp i dialogrutans kod med:
fält = (EditText) findViewById(R.id.edit_text_fält);

För att sedan göra följande:
String lol = fält.getText().toString();

Då kraschar appen. Det är definitivt vid getText().toString skedet.
Någon som har någon aning?
Logcat infon är inte mycket till hjälp. NullPointerException.
__________________
Android Timeline
HTC Hero, HTC Desire, HTC Desire HD, LG Optimus 3D, HTC Sensation, Samsung Galaxy Note, HTC One X, Xperia Z, Samsung Galaxy S4, HTC One (m8)
crazyrobban är inte uppkopplad   Svara med citat
Gammal 2012-04-01, 22:16   #4 - (Permalink)
Senap
Kid Droid
 

Reg.datum: dec 2010
Ort: Göteborg
Inlägg: 113

Operatör: Tele2
Telefon: Google Galaxy Nexus
ROM: Original


Tablet: Asus Transformer Infinity



Tack: 13
Tackad 13 ggr i 12 inlägg
Standard

NullPointerException, alltså är din EditText (fält) == null. Men det står nog i LogCat exakt vilken komponent som är null.

Kan det ha att göra med att du använder bokstaven ä? eller gör du bara det här på forumet? Även om inte det är felet så rekommenderar jag att bara använda engelska alfabetet och skippa "å ä ö" i din kod.

Koden ser korrekt ut annars..

Kod:
EditText field = (EditText) findViewById(R.id.textfield);
String data = field.getText().toString();
Kan det vara att du kör getText innan du har kört findViewById, då kommer EditText ju att vara null?
__________________
På Språng • Nästa tur för Västtrafik • TrådGoogle Play
Senap är inte uppkopplad   Svara med citat
Gammal 2012-04-01, 22:40   #5 - (Permalink)
crazyrobban
Youth Droid
 
crazyrobbans avatar
 

Reg.datum: dec 2009
Ort: Göteborg
Inlägg: 559

Operatör: Telia
Telefon: Samsung Galaxy S4
ROM: Google Edition ROM 4.4.2

Launcher: Google Home
Tablet: Transformer Book Trio


Launcher: Nova Launcher
Tack: 43
Tackad 30 ggr i 23 inlägg
Standard

:-/

Inga å,ä,ö. Det var bara för att det skulle vara lite trevligare här på forumet.
Och getText delen är tyvärr efter finViewById. Tack för förslagen dock!

04-01 21:18:44.295: E/AndroidRuntime(28248): java.lang.NullPointerException
04-01 21:18:44.295: E/AndroidRuntime(28248): at com.lofgren.app-namn.Main$4$1.onClick(Main.java:146)

04-01 21:18:44.295: E/AndroidRuntime(28248): at com.android.internal.app.AlertController$ButtonHan dler.handleMessage(AlertController.java:165)
__________________
Android Timeline
HTC Hero, HTC Desire, HTC Desire HD, LG Optimus 3D, HTC Sensation, Samsung Galaxy Note, HTC One X, Xperia Z, Samsung Galaxy S4, HTC One (m8)
crazyrobban är inte uppkopplad   Svara med citat
Gammal 2012-04-01, 23:04   #6 - (Permalink)
Senap
Kid Droid
 

Reg.datum: dec 2010
Ort: Göteborg
Inlägg: 113

Operatör: Tele2
Telefon: Google Galaxy Nexus
ROM: Original


Tablet: Asus Transformer Infinity



Tack: 13
Tackad 13 ggr i 12 inlägg
Standard

Kan du inte lägga upp din kod så att man kan ta sig en närmare titt? Det är svårt att diagnosera annars

När det gäller dialogrutor så brukar jag själv använda AlertDialog. Kolla exemplet längst ner för hur man kan göra en egen design på dialogen. Visst, det är lite mer kod än med andra dialogrutor men det blir precis som man vill ha det och du bygger upp den varje gång användaren tar fram den.
__________________
På Språng • Nästa tur för Västtrafik • TrådGoogle Play
Senap är inte uppkopplad   Svara med citat
Gammal 2012-04-02, 07:55   #7 - (Permalink)
e7andy
Adult Droid
 
e7andys avatar
 

Reg.datum: okt 2009
Ort: Göteborg
Inlägg: 1 355

Operatör: Tele2
Telefon: Google Nexus 5
ROM: Original


Tablet: Nexus 7 & iPad 2



Tack: 37
Tackad 232 ggr i 204 inlägg
Standard

Vi behöver ha lite mer kod för att se hur du skapar din dialog.

Kolla här för hur man gör custom dialogs:
http://developer.android.com/guide/t...l#CustomDialog
Hämta en referens till (i exemplet) texten i dialogen med:
TextView text = (TextView) dialog.findViewById(R.id.text);

Dvs. från den aktivitet som startar dialogen så går du via det instansierade Dialog-objektet och hämtar det du vill ha.
e7andy är inte uppkopplad   Svara med citat
Gammal 2012-04-02, 08:58   #8 - (Permalink)
crazyrobban
Youth Droid
 
crazyrobbans avatar
 

Reg.datum: dec 2009
Ort: Göteborg
Inlägg: 559

Operatör: Telia
Telefon: Samsung Galaxy S4
ROM: Google Edition ROM 4.4.2

Launcher: Google Home
Tablet: Transformer Book Trio


Launcher: Nova Launcher
Tack: 43
Tackad 30 ggr i 23 inlägg
Standard

Nu är koden hemma och jag är på jobbet, men dialogrutan har jag byggt utifrån APIDemos delen för Custom Dialogs.

Alltså,

Vid tryck på en knapp
{
bygg dialogruta
--{
gör det ena och det tredje
när "ok" knappen trycks på i dialogrutan
------{
gör något annat
------}
--}
visa dialogruta
}


Om jag inte minns fel.
Jag hade säkert kunna bygga det betydligt snyggare genom att hantera koden för dialogrutan i ett tidigare skede, och bara anropa det vid knapptryckningen.
Jag är fortfarande mega-noob på java programmering.

Jag laddar upp koden i eftermiddag.
Tack för all hjälp!
__________________
Android Timeline
HTC Hero, HTC Desire, HTC Desire HD, LG Optimus 3D, HTC Sensation, Samsung Galaxy Note, HTC One X, Xperia Z, Samsung Galaxy S4, HTC One (m8)
crazyrobban är inte uppkopplad   Svara med citat
Gammal 2012-04-02, 09:38   #9 - (Permalink)
DreamHawk
Android Master
 
DreamHawks avatar
 

Reg.datum: maj 2010
Inlägg: 6 101

Operatör: Telia
Telefon: Samsung Galaxy S4
ROM: Original

Launcher: Nova Launcher
Tablet: Google Nexus 7
ROM: Original


Tack: 70
Tackad 414 ggr i 281 inlägg
Standard

Jag är rätt van vid att jobba med CustomDialogs iom min Anteckningsapp samt kalori-appen, så, om du bara visar oss den snuttkoden med dialogen, så kan jag nog hjälpa till
__________________
CuteKorean Index
DreamHawk är inte uppkopplad   Svara med citat
Gammal 2012-04-02, 10:55   #10 - (Permalink)
Maxxan
Kid Droid
 

Reg.datum: mar 2010
Inlägg: 161










Tack: 2
Tackad 4 ggr i 4 inlägg
Standard

Du har satt vilken layout dialogen ska använda? Annars kommer findViewById retunera null. Typ setContentView(R.layout.mydialog); i onCreate eller i konstruktorn eller nån annan stans innan du försöker hämta ut editfältet?
Maxxan är inte uppkopplad   Svara med citat
Gammal 2012-04-02, 13:14   #11 - (Permalink)
crazyrobban
Youth Droid
 
crazyrobbans avatar
 

Reg.datum: dec 2009
Ort: Göteborg
Inlägg: 559

Operatör: Telia
Telefon: Samsung Galaxy S4
ROM: Google Edition ROM 4.4.2

Launcher: Google Home
Tablet: Transformer Book Trio


Launcher: Nova Launcher
Tack: 43
Tackad 30 ggr i 23 inlägg
Standard

Kod kommer efter jobbet.

Layouten är definierad, annars hade jag ju inte ens sett något i dialogrutan antar jag.
Jag har flyttat runt den lite grann i koden för att se om det löste problemet, men oavsett om jag haft den definierad globalt, i onCreate eller till och med i onClickListener delen så har det inte gjort någon skillnad.

Jag är på en så pass låg nivå, så jag är inte ens helt hundra på vad jag menar när jag säger globalt. Jag antar att det är när något är definierat innan onCreate och liksom, precis i början av aktiviteten?
__________________
Android Timeline
HTC Hero, HTC Desire, HTC Desire HD, LG Optimus 3D, HTC Sensation, Samsung Galaxy Note, HTC One X, Xperia Z, Samsung Galaxy S4, HTC One (m8)
crazyrobban är inte uppkopplad   Svara med citat
Gammal 2012-04-02, 16:30   #12 - (Permalink)
crazyrobban
Youth Droid
 
crazyrobbans avatar
 

Reg.datum: dec 2009
Ort: Göteborg
Inlägg: 559

Operatör: Telia
Telefon: Samsung Galaxy S4
ROM: Google Edition ROM 4.4.2

Launcher: Google Home
Tablet: Transformer Book Trio


Launcher: Nova Launcher
Tack: 43
Tackad 30 ggr i 23 inlägg
Standard

Ok, här är min main.java fil. :-)
Bortplockad
be gentle...
__________________
Android Timeline
HTC Hero, HTC Desire, HTC Desire HD, LG Optimus 3D, HTC Sensation, Samsung Galaxy Note, HTC One X, Xperia Z, Samsung Galaxy S4, HTC One (m8)

Senast redigerad av crazyrobban den 2012-04-03 klockan 18:05.
crazyrobban är inte uppkopplad   Svara med citat
Gammal 2012-04-02, 22:40   #13 - (Permalink)
e7andy
Adult Droid
 
e7andys avatar
 

Reg.datum: okt 2009
Ort: Göteborg
Inlägg: 1 355

Operatör: Tele2
Telefon: Google Nexus 5
ROM: Original


Tablet: Nexus 7 & iPad 2



Tack: 37
Tackad 232 ggr i 204 inlägg
Standard

Du har lagt in en null-kontroll nu va? Då slipper du NullPointerExceptions antar jag, men du får inget värde.

Testa att istället för:
pris = (EditText) findViewById(R.id.pris_edit);
göra:
pris = (EditText) dialog.findViewById(R.id.pris_edit);

Kolla med hjälp av debuggern att du får ut rätt objekt till pris.
e7andy är inte uppkopplad   Svara med citat
Svara




Ämnesverktyg Sök i det här ämnet
Sök i det här ämnet:

Avancerad sökning
Visningsalternativ

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är

Forumhopp



Alla tider är GMT +2. Klockan är nu 18:41.

Serverdrift och kapacitet levereras från ipeer.



Design By: Miner Skinz.com
Powered by vBulletin® Version 3.8.9 Beta 1
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson