Question

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);
Was it helpful?

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);

OTHER TIPS

Maybe try to use the pos in parameter of onItemSelected, and get the item via the adapter, like this :

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

                Cursor vTypeChose = (Cursor) scaType.getItem(pos);
                if (vTypeChose != null) {
                    typePicked = vTypeChose.getString(
                    vTypeChose.getColumnIndex(DataBaseHelper.POWERSPORTS_TYPE));
                }
             }
        } 

In order to update spin2 accordingly with spin1 selection you must reload spin2 data at onItemSelected. Try this:

vTypeSpinner.setOnItemSelectedListener(new OnItemSelectedListener(){

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

        TextView picked = (TextView)selectedItemView;
        if(picked != null){

            typePicked = picked.getText().toString();
            vMake = (Cursor) DataBaseHelper.getPowersportsMake(typePicked);
            scaMake.changeCursor(vMake);
        }
   }
}

Also change. (this code is run before onItemSelected this is why typePicked is null)

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});  

to

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

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

I think after these changes you can use your original code.

Another possible way is to use the id passed to this method and get the value directly from database

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top