views:

699

answers:

1

I am getting the text 'android.database.sqlite.SQLiteCursor@435b9ba0' returned from a spinner.getSelectedItem().toString() call. I'm not sure why. The spinner is tied to a SimpleCursorAdapter.

Here is the code

        cCategories = (Cursor) myAdapter.getAllCategories();
    this.startManagingCursor(cCategories);

    SimpleCursorAdapter scaCategories = new SimpleCursorAdapter(this, R.layout.track_category_item,cCategories,new String[] {DBAdapter.KEY_CATEGORIES_NAME},new int[]{R.id.text1});
    scaCategories.setDropDownViewResource(R.layout.track_category_dropdown_item); 
    mCatSpinner = (Spinner) findViewById(R.id.thecategory);
    mCatSpinner.setAdapter(scaCategories);

    if(mCatSpinner.isSelected() != true) {
        mCatSpinner.setSelection(0);
    }

and the xml track_category_item.xml

<TextView  xmlns:android="http://schemas.android.com/apk/res/android"

android:id="@+id/text1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@android:id/text1" style="?android:attr/spinnerItemStyle" android:ellipsize="marquee" android:singleLine="true">

track_category_dropdown_item.xml

<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/text1" 
style="?android:attr/spinnerDropDownItemStyle" 
android:singleLine="true" 
android:layout_width="fill_parent" 
android:layout_height="?android:attr/listPreferredItemHeight" 
android:ellipsize="marquee" />

The spinner xml looks like this

<Spinner
android:id="@+id/thecategory"
android:prompt="@string/SELECT_CATEGORY"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_x="15px"
android:layout_y="133px"
>

and the cursor being returned is

   public Cursor getAllCategories() 
{
    return db.query(DATABASE_CATEGORIES_TABLE, new String[] {
            KEY_CATEGORIES_ROWID,
            KEY_CATEGORIES_NAME,
            KEY_CATEGORIES_DEFAULT}, 
            null, 
            null, 
            null, 
            null, 
            null);
}

The spinner appears to work properly. When I try to save this is what is passed as the value of the selected item using spinner.getSelectedItem().toString().

Anyone see anything blatently wrong here. not sure what to do.

thanks patrick

A: 

Your code is working as you wrote it. Spinner is an AdapterView. The adapter you connected it to is a SimpleCursorAdapter. This means that the selected item is a Cursor (positioned at the item in the Cursor's result set corresponding with the user's choice). Cursor has the default implementation of toString(), which returns something like android.database.sqlite.SQLiteCursor@435b9ba0.

Since you didn't tell us what you are trying to do, it is impossible to accurately advise you further. Whatever it is you want to save, however, needs to be pulled out of the Cursor you get from getSelectedItem().

CommonsWare
Thanks commonsware, I think you may have answered my question. I am simply trying to take the value of the selected item, and save it to a database table. Initially I was using an ArrayAdapter to populate the spinner. The array was a single element array with a couple of categories ("Business", "Personal"). This worked as a string was passed.So your saying I will need to do some additional coding to locate the actual categoryname from the cursor based on the passed spinner.getSelectedItemPosition()?thankspatrick
Yes. Given your `query()`, you would need to call `getString(1)` on the `Cursor`, to get back the 2nd column...assuming `KEY_CATEGORIES_NAME` is the value you seek.
CommonsWare