Search code examples
androidcursorspinnersimplecursoradapter

Null String Value OnItemSelected


THIS gives me a string value that I can use:

                    Cursor vTypeChose = (Cursor)(vTypeSpinner.getSelectedItem());
                    if (vTypeChose != null) {
                        typePicked = vTypeChose.getString(
                        vTypeChose.getColumnIndex(DataBaseHelper.POWERSPORTS_TYPE));
                    }

THIS gives me null:

vTypeSpinner.setOnItemSelectedListener(new OnItemSelectedListener(){

            public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int
                pos, long id) {
                 if(pos!=0){

                    Cursor vTypeChose = (Cursor)(vTypeSpinner.getSelectedItem());
                    if (vTypeChose != null) {
                        typePicked = vTypeChose.getString(
                        vTypeChose.getColumnIndex(DataBaseHelper.POWERSPORTS_TYPE));


                    }
                 }
            }

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

            }
        });

Using a Log.e and a toast with the typePicked variable within the OnItemSelectedListener shows me that it is firing, just not passing me the correct value.

Without the OnItemSelectedListener it populates the second spinner with the related data. Once the OnItemSelectedListener is added, the 2nd spinner gets populated with nothing because the string value is null.

(EDIT) Added code:

public class PowersportsEquivalent extends Activity {

DataBaseHelper myDbHelper;
String typePicked = null;
String makePicked = null;

@SuppressWarnings("deprecation")
@Override
protected void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_powersports_equivalent);
    myDbHelper = new DataBaseHelper(this);
    try {
        myDbHelper.createDataBase();
    } catch (IOException ioe) {
        // TODO Auto-generated catch block
        throw new Error("Unable to create database");
    }

    try { 
        myDbHelper.openDataBase();
    }catch(SQLException sqle){
        throw sqle;

    }

    final Cursor vType;
    final Cursor vMake;
    final Spinner vTypeSpinner;
    final Spinner vMakeSpinner;


    //POWERSPORTS TYPE Cursor
    vType = (Cursor) DataBaseHelper.getPowersportsType();
    startManagingCursor(vType);

        SimpleCursorAdapter scaType = new SimpleCursorAdapter(this, 
                android.R.layout.simple_spinner_item, 
                vType,
                new String [] {DataBaseHelper.POWERSPORTS_TYPE},
                new int[] {android.R.id.text1});

        scaType.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        vTypeSpinner = (Spinner) findViewById(R.id.typeSpinner);
        vTypeSpinner.setAdapter(scaType);

    //POWERSPORTS MAKE Cursor

        vTypeSpinner.setOnItemSelectedListener(new OnItemSelectedListener(){

            public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int
                pos, long id) {
                 if(pos!=0){

                    Cursor vTypeChose = (Cursor)(vTypeSpinner.getSelectedItem());
                    if (vTypeChose != null) {
                        typePicked = vTypeChose.getString(
                        vTypeChose.getColumnIndex(DataBaseHelper.POWERSPORTS_TYPE));


                    }
                 }
            }

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

            }
        });
    vMake = (Cursor) DataBaseHelper.getPowersportsMake(typePicked);
    startManagingCursor(vMake);

        SimpleCursorAdapter scaMake = new SimpleCursorAdapter(this, 
                android.R.layout.simple_spinner_item, 
                vMake,
                new String [] {DataBaseHelper.POWERSPORTS_MAKE},
                new int[]{android.R.id.text1});

        scaMake.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        vMakeSpinner = (Spinner) findViewById(R.id.makeSpinner);
        vMakeSpinner.setAdapter(scaMake);

Solution

  • Your code edited:

    public class PowersportsEquivalent extends Activity {
    
        DataBaseHelper myDbHelper;
        String typePicked = null;
        String makePicked = null;
        final SimpleCursorAdapter scaMake;
    
        @SuppressWarnings("deprecation")
        @Override
        protected void onCreate(Bundle savedInstanceState){
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_powersports_equivalent);
            myDbHelper = new DataBaseHelper(this);
            try {
                myDbHelper.createDataBase();
            } catch (IOException ioe) {
                // TODO Auto-generated catch block
                throw new Error("Unable to create database");
            }
    
            try { 
                myDbHelper.openDataBase();
            }catch(SQLException sqle){
                throw sqle;
    
            }
    
            final Cursor vType;
            final Cursor vMake;
            final Spinner vTypeSpinner;
            final Spinner vMakeSpinner;
    
    
            //POWERSPORTS TYPE Cursor
            vType = (Cursor) DataBaseHelper.getPowersportsType();
            startManagingCursor(vType);
    
            SimpleCursorAdapter scaType = new SimpleCursorAdapter(this, 
                        android.R.layout.simple_spinner_item, 
                        vType,
                        new String [] {DataBaseHelper.POWERSPORTS_TYPE},
                        new int[] {android.R.id.text1});
    
            scaType.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
            vTypeSpinner = (Spinner) findViewById(R.id.typeSpinner);
            vTypeSpinner.setAdapter(scaType);
    
            //POWERSPORTS MAKE Cursor
    
            vTypeSpinner.setOnItemSelectedListener(new OnItemSelectedListener(){
    
                public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int pos, long id) {
    
                    if(pos!=0){
    
                        TextView picked = (TextView)selectedItemView;
                        if(picked != null){
    
                            typePicked = picked.getText().toString();
                            vMake = (Cursor) DataBaseHelper.getPowersportsMake(typePicked);
                            scaMake.changeCursor(vMake);    
    
                        }
                    }
                }
    
                @Override
                public void onNothingSelected(AdapterView<?> arg0) {
                        // TODO Auto-generated method stub
    
                }
            });
    
            //vMake = (Cursor) DataBaseHelper.getPowersportsMake(typePicked);
            //startManagingCursor(vMake);
    
            scaMake = new SimpleCursorAdapter(this, 
                        android.R.layout.simple_spinner_item, 
                        null,
                        new String [] {DataBaseHelper.POWERSPORTS_MAKE},
                        new int[]{android.R.id.text1});
    
            scaMake.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
            vMakeSpinner = (Spinner) findViewById(R.id.makeSpinner);
            vMakeSpinner.setAdapter(scaMake);