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
}
});}}
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
where your variable is final.