0

How do I fix this error? I can't find anything to help me! Code snippets would be appreciated!

The reason the adapter for sp2 is set within the onItemSelected for sp1 is because I want the output for sp2 to be dependent on the selection made in sp1.

logcat:

    08-05 16:36:24.856: D/dalvikvm(6606): GC_EXTERNAL_ALLOC freed 81K, 43% free 3119K/5379K, external 2770K/2773K, paused 28ms
08-05 16:36:25.707: D/AndroidRuntime(6606): Shutting down VM
08-05 16:36:25.707: W/dalvikvm(6606): threadid=1: thread exiting with uncaught exception (group=0x4001e560)
08-05 16:36:25.707: E/AndroidRuntime(6606): FATAL EXCEPTION: main
08-05 16:36:25.707: E/AndroidRuntime(6606): java.lang.NullPointerException
08-05 16:36:25.707: E/AndroidRuntime(6606):     at android.widget.ArrayAdapter.getCount(ArrayAdapter.java:291)
08-05 16:36:25.707: E/AndroidRuntime(6606):     at android.widget.AbsSpinner.setAdapter(AbsSpinner.java:113)
08-05 16:36:25.707: E/AndroidRuntime(6606):     at com.madonk.louisiana.festivals.Region$1.onItemSelected(Region.java:107)
08-05 16:36:25.707: E/AndroidRuntime(6606):     at android.widget.AdapterView.fireOnSelected(AdapterView.java:877)
08-05 16:36:25.707: E/AndroidRuntime(6606):     at android.widget.AdapterView.access$200(AdapterView.java:42)
08-05 16:36:25.707: E/AndroidRuntime(6606):     at android.widget.AdapterView$SelectionNotifier.run(AdapterView.java:843)
08-05 16:36:25.707: E/AndroidRuntime(6606):     at android.os.Handler.handleCallback(Handler.java:587)
08-05 16:36:25.707: E/AndroidRuntime(6606):     at android.os.Handler.dispatchMessage(Handler.java:92)
08-05 16:36:25.707: E/AndroidRuntime(6606):     at android.os.Looper.loop(Looper.java:130)
08-05 16:36:25.707: E/AndroidRuntime(6606):     at android.app.ActivityThread.main(ActivityThread.java:3821)
08-05 16:36:25.707: E/AndroidRuntime(6606):     at java.lang.reflect.Method.invokeNative(Native Method)
08-05 16:36:25.707: E/AndroidRuntime(6606):     at java.lang.reflect.Method.invoke(Method.java:507)
08-05 16:36:25.707: E/AndroidRuntime(6606):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
08-05 16:36:25.707: E/AndroidRuntime(6606):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
08-05 16:36:25.707: E/AndroidRuntime(6606):     at dalvik.system.NativeStart.main(Native Method)

Here is the offending code:

sp2.setAdapter(sc_cit_adp);

.java:

package com.madonk.louisiana.festivals;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import android.os.Bundle;
import android.app.Activity;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.Spinner;

/**
 * @author madonk
 *
 */
public class Region extends Activity {

Spinner sp1,sp2,sp3;
ArrayAdapter<String> reg_adp,sw_cit_adp,sc_cit_adp,sw_lake_charles_adp,sw_iowa_adp,sc_lafayette_adp,sc_gueydan_adp;
List<String> regions,sw_cities,sc_cities,sw_lake_charles,sw_iowa,sc_lafayette,sc_gueydan;

int pos;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_region);

    String[] regionsArray = getResources().getStringArray(R.array.regions_array);
    regions = new ArrayList<String>(Arrays.asList(regionsArray));

    String[] swcitiesArray = getResources().getStringArray(R.array.southwest_cities_array);
    sw_cities = new ArrayList<String>(Arrays.asList(swcitiesArray));

    String[] swiowaArray = getResources().getStringArray(R.array.sw_iowa_array);
    sw_iowa = new ArrayList<String>(Arrays.asList(swiowaArray));

    String[] swlakecharlesArray = getResources().getStringArray(R.array.sw_lake_charles_array);
    sw_lake_charles = new ArrayList<String>(Arrays.asList(swlakecharlesArray));

    String[] sclafayetteArray = getResources().getStringArray(R.array.sc_lafayette_array);
    sc_lafayette = new ArrayList<String>(Arrays.asList(sclafayetteArray));

    String[] scgueydanArray = getResources().getStringArray(R.array.sc_gueydan_array);
    sc_gueydan = new ArrayList<String>(Arrays.asList(scgueydanArray));

    sp1= (Spinner) findViewById(R.id.regions_spinner);
    sp2= (Spinner) findViewById(R.id.city_spinner);
    sp3= (Spinner) findViewById(R.id.festival_spinner);

    reg_adp=new ArrayAdapter<String> (this,android.R.layout.simple_dropdown_item_1line,regions);
    reg_adp.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line);
    sp1.setAdapter(reg_adp);

    sw_cit_adp=new ArrayAdapter<String> (this,android.R.layout.simple_dropdown_item_1line,sw_cities);
    sw_cit_adp.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line);

    sw_lake_charles_adp=new ArrayAdapter<String> (this,android.R.layout.simple_dropdown_item_1line,sw_lake_charles);
    sw_lake_charles_adp.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line);

    sw_iowa_adp=new ArrayAdapter<String> (this,android.R.layout.simple_dropdown_item_1line,sw_iowa);
    sw_iowa_adp.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line);

    sc_cit_adp=new ArrayAdapter<String> (this,android.R.layout.simple_dropdown_item_1line,sc_cities);
    sc_cit_adp.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line);

    sc_lafayette_adp=new ArrayAdapter<String> (this,android.R.layout.simple_dropdown_item_1line,sc_lafayette);
    sc_lafayette_adp.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line);

    sc_gueydan_adp=new ArrayAdapter<String> (this,android.R.layout.simple_dropdown_item_1line,sc_gueydan);
    sc_gueydan_adp.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line);


    sp1.setOnItemSelectedListener(new OnItemSelectedListener() {

        public void onItemSelected(AdapterView<?> arg0, View arg1,
                int arg2, long arg3) {


                 String reg_select = (sp1.getSelectedItem().toString());
                 if (reg_select.contentEquals("Southwest")){
                     sp2.setAdapter(sw_cit_adp); 
                     sp2.setOnItemSelectedListener(new OnItemSelectedListener() {

                            public void onItemSelected(AdapterView<?> arg0, View arg1,
                                    int arg2, long arg3) {
                                // TODO Auto-generated method stub

                             String sw_cit_select = (sp2.getSelectedItem().toString());
                             if (sw_cit_select.contentEquals("Lake Charles")){
                                 sp3.setAdapter(sw_lake_charles_adp); }

                             else if (sw_cit_select.contentEquals("Iowa")){
                                 sp3.setAdapter(sw_iowa_adp); }


                            ;}

                            public void onNothingSelected(AdapterView<?> arg0) {
                                // TODO Auto-generated method stub

                            };});}

                 else  if (reg_select.contentEquals("South Central")){
                     sp2.setAdapter(sc_cit_adp); 
                     sp2.setOnItemSelectedListener(new OnItemSelectedListener() {

                            public void onItemSelected(AdapterView<?> arg0, View arg1,
                                    int arg2, long arg3) {
                                // TODO Auto-generated method stub

                             String sc_cit_select = (sp2.getSelectedItem().toString());
                             if (sc_cit_select.contentEquals("Lafayette")){
                                 sp3.setAdapter(sc_lafayette_adp); }

                             else if (sc_cit_select.contentEquals("Gueydan")){
                                 sp3.setAdapter(sc_gueydan_adp); }


                            ;}

                            public void onNothingSelected(AdapterView<?> arg0) {
                                // TODO Auto-generated method stub

                            };});}

                 }



    public void onNothingSelected(AdapterView<?> arg0) {
        // TODO Auto-generated method stub

    }
});}}
Madonk
  • 117
  • 1
  • 8
  • 18

1 Answers1

2

That's because you are trying to access sw_cit_adp from inside of an Anonymous inner class. These classes only like when the data members they access are final Make sure you have something like

final ArrayAdapter sw_cit_adp = new ArrayAdapter();

where your variable is final.

Frank Sposaro
  • 8,511
  • 4
  • 43
  • 64
  • That doesn't seem correct. Can you post your original LogCat code please? Your adapter may not be an ArrayAdapter, I was just giving an example since you didn't post your declaration in the code sample. But making it final should work. You may have to run a project clean. – Frank Sposaro Aug 05 '12 at 21:17
  • and im creating my ArrayAdapter like so 'sc_cit_adp=new ArrayAdapter (this,android.R.layout.simple_dropdown_item_1line,sc_cities); sc_cit_adp.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line);' – Madonk Aug 05 '12 at 21:18
  • I have posted the complete codes, edited it a few minutes ago – Madonk Aug 05 '12 at 21:18
  • And that way works fine for sw_cit_adp, just not sc_cit_adp. That's what I don't get. – Madonk Aug 05 '12 at 21:20
  • holy bananas that's a lot of adapters. That's a lot to keep track of. you tried putting. So it's probably because you have to set a final variable equal to something in the constructor or when you declare. That's why you are getting a syntax error. – Frank Sposaro Aug 05 '12 at 21:21
  • Oh. In that case are you sure your getting a handle on sp2?? – Frank Sposaro Aug 05 '12 at 21:23
  • yea, pretty much everything is getting done on this Activity, once a user selects from my third spinner they will be taken to a new activity that will display all the info. It's alot, and going to be alot more lol. That's why all of my adapters are named the way they are. I created sp2 the same exact way I created sp1, and the code looks the same, no errors or warnings, but when sp1 is set to South Central in the app it crashes. – Madonk Aug 05 '12 at 21:26
  • I gave you credit for the answer. You were correct, it was a lot to keep track of, so I started the project over again with a different layout. – Madonk Aug 09 '12 at 00:50