[Android] Nullpointer Exception in Spinner

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Anoniem: 347253

Topicstarter
Beste tweakers,

In een Android-app die ik maak zit ik met een lastig probleem. Ik heb nu al vrij veel gegoogled maar googlen voor een NullPointer exception is lastig(Het is namelijk best wel code-specifiek). Zelf kom ik er ook niet achter wat ik fout doe.

In mijn code heb ik de volgende regels, ik maak 2 spinners objects.

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
Spinner spinner = (Spinner) findViewById(R.id.spinner1); // een nieuw spinner object aanmaken.
ArrayAdapter adapter = ArrayAdapter.createFromResource(this, R.array.input_array, android.R.layout.simple_spinner_item);
//Het spinner object koppelen aan de spinner in XML/firstrun.xml
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); //de layout van de spinner instellen.
spinner.setAdapter(adapter);//de adapter van de spinner setten.

if(getString(R.string.classIsSet).equals("")) {
setContentView(R.layout.firstrun);
Spinner spinner1 = (Spinner) findViewById(R.id.spinner2);
ArrayAdapter adapter1 = ArrayAdapter.createFromResource(this, R.array.input_array2, android.R.layout.simple_spinner_item);
adapter1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner1.setAdapter(adapter1);
setContentView(R.layout.firstrun);

De regel waarop ik een nullpointer krijg heb ik vetgedrukt. (edit: vetdrukken in code kan niet de regel met error is:
code:
1
 spinner.setAdapter(adapter);//de adapter van de spinner setten.


In mijn XML bestand maak ik de spinners als volgt aan:
XML:
1
2
3
4
5
6
7
8
9
10
11
 <Spinner
android:id="@+id/spinner1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:prompt="@string/input_prompt" />

                   <Spinner
android:id="@+id/spinner2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
 android:prompt="@string/input_prompt2" /> 


Ik hoop dat jullie mee willen denken hoe het kan dat ik een NullPointer exception krijg.

Bij voorbaat dank,

Jesse Tielens

[ Voor 12% gewijzigd door Anoniem: 347253 op 04-04-2011 18:19 ]


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 01-06 18:50

NMe

Quia Ego Sic Dico.

Waar is je simple_spinner_item in je layoutfile en wat bevat de input_array array resource?

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 05-06 22:44

Janoz

Moderator Devschuur®

!litemod

Er zijn 2 mogelijkheden:

Spinner is null
de nullpointer treed op in de setAdapter methode.

De eerte is te verifieren door eens met de debugger door je code heen te stappen en te kijken of spinner wel een waarde heeft. De tweede op zich ook, maar daar helpt het ook wanneer je de volledige stacktrace van de exception hebt.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 01-06 18:50

NMe

Quia Ego Sic Dico.

Janoz schreef op maandag 04 april 2011 @ 18:50:
Er zijn 2 mogelijkheden:

Spinner is null
de nullpointer treed op in de setAdapter methode.

De eerte is te verifieren door eens met de debugger door je code heen te stappen en te kijken of spinner wel een waarde heeft. De tweede op zich ook, maar daar helpt het ook wanneer je de volledige stacktrace van de exception hebt.
Ik vermoed het tweede. Volgens mij is de adapter null of bevat hij een nullwaarde op een cruciaal punt omdat niet de juiste resource uit de layout gereferenced wordt, vandaar ook mijn vraag hierboven. :P

edit:
@hierbeneden: zie mijn edit. :P

[ Voor 7% gewijzigd door NMe op 04-04-2011 18:56 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 05-06 22:44

Janoz

Moderator Devschuur®

!litemod

Als adapter null zou zijn dan zou de nullpointer al in regel 4 optreden.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

Anoniem: 347253

Topicstarter
NMe schreef op maandag 04 april 2011 @ 18:49:
Waar is je simple_spinner_item in je layoutfile en wat bevat de input_array array resource?
simple_spinner_item hoef je niet te definiëren is een vastgelegde waarde in android.

input_array vind men hier:
XML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<string name="input_prompt">Kies jouw leerjaar:</string>
    <string-array name="input_array">
        <item>1</item>
        <item>2</item>
        <item>3</item>
        <item>4</item>
        <item>5</item>
    </string-array>

        <string name="input_prompt2">Kies jouw klas:</string>
    <string-array name="input_array2">
        <item>A</item>
        <item>B</item>
        <item>C</item>
        <item>D</item>
        <item></item>
    </string-array> 
Janoz schreef op maandag 04 april 2011 @ 18:50:
Er zijn 2 mogelijkheden:

Spinner is null
de nullpointer treed op in de setAdapter methode.

De eerte is te verifieren door eens met de debugger door je code heen te stappen en te kijken of spinner wel een waarde heeft. De tweede op zich ook, maar daar helpt het ook wanneer je de volledige stacktrace van de exception hebt.
Ik ga dalijk gelijk met de debugger 'er doorheen stampen', en de volledige stacktrace wil ik ook wel overhandigen. Maar ik werd er niet veel wijzer van.

De stacktrace kun je hier zien:
Afbeeldingslocatie: http://img687.imageshack.us/f/logrb.jpg/

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 05-06 22:44

Janoz

Moderator Devschuur®

!litemod

De stacktrace kun je ook wel gewoon copy pasten ;), maar goed, zo te zien is de nullpointer daadwerkelijk in regel 32 van RoosterwijzigingenActivity. Dat komt overeen met regel 5 van de door jou? Dan vind ik het erg vreemd, want dat kan alleen maar betekenen dat spinner null is. Wanneer de nullpointer op zou treden in de setAdapter methode, dan zou die aanroep ook op de stacktrace moeten staan, en dat staat hij niet.

Met de debugger door je code heenstappen zal waarschijnlijk bevestigen dat spinner null is (en het is stappen, niet stampen, en het is helemaal niet moeilijk. dubbelklik voor de kantlijn (paar regels boven de fout) en dan niet op run, maar op debug drukken. Eclipse vraagt vanzelf te wisselen van perspective en dan kun je rechts bovenin de waarden van alle variabelen zien)

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • ReenL
  • Registratie: Augustus 2010
  • Laatst online: 14-09-2022
offtopic:
mooie benaming trouwens spinner = spinner1 en spinner2 = spinner1.

Acties:
  • 0 Henk 'm!

  • alex3305
  • Registratie: Januari 2004
  • Laatst online: 06-06 17:26
Probeer de interne debugger van DDMS/Eclipse eens. Dan kun je namelijk door de code heenstappen en met een mouse-over de waarde van variabelen bekijken.

Acties:
  • 0 Henk 'm!

Anoniem: 347253

Topicstarter
Janoz schreef op maandag 04 april 2011 @ 19:22:
De stacktrace kun je ook wel gewoon copy pasten ;), maar goed, zo te zien is de nullpointer daadwerkelijk in regel 32 van RoosterwijzigingenActivity. Dat komt overeen met regel 5 van de door jou? Dan vind ik het erg vreemd, want dat kan alleen maar betekenen dat spinner null is. Wanneer de nullpointer op zou treden in de setAdapter methode, dan zou die aanroep ook op de stacktrace moeten staan, en dat staat hij niet.

Met de debugger door je code heenstappen zal waarschijnlijk bevestigen dat spinner null is (en het is stappen, niet stampen, en het is helemaal niet moeilijk. dubbelklik voor de kantlijn (paar regels boven de fout) en dan niet op run, maar op debug drukken. Eclipse vraagt vanzelf te wisselen van perspective en dan kun je rechts bovenin de waarden van alle variabelen zien)
Bedankt voor de hulp, nu heb ik ook nog eens leren debuggen. Wat blijkt nu, in de regel:
Java:
1
Spinner spinner = (Spinner) findViewById(R.id.spinner1); // een nieuw spinner object aanmaken.

Hoort een spinner object aangemaakt te woorden, maar spinner=null na die regel. Nu eens uitzoeken hoe dat kan komen.
ReenL schreef op maandag 04 april 2011 @ 19:24:
offtopic:
mooie benaming trouwens spinner = spinner1 en spinner2 = spinner1.
offtopic:
weet jij iets beters?

Acties:
  • 0 Henk 'm!

  • michiel_
  • Registratie: Juli 2005
  • Niet online
Uit m'n hoofd (al een tijdje niet meer Android geprogrammeerd):

setContentView() inflate de layout, als je die nou eens boven de code gooit? Lijkt me aannemelijk dat findViewById() null returned als de layout nog niet geïnflate is.

Acties:
  • 0 Henk 'm!

Anoniem: 347253

Topicstarter
michiel je bent awesome, dat heeft het gefixed!

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 05-06 22:44

Janoz

Moderator Devschuur®

!litemod

Nou, in eerste instantie is het natuurlijk wel erg verwarrend dat spinner1 in de code een andere is dan die in je layout, maar veel handiger is natuurlijk om het over een leerjaarSpiner te hebben. Hetzelfde geldt uiteraard ook voor je arrays.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'

Pagina: 1