【问题标题】:android.database.sqlite.SQLiteCursor@435b9ba0android.database.sqlite.SQLiteCursor@435b9ba0
【发布时间】:2010-01-16 00:54:28
【问题描述】:

我收到从 spinner.getSelectedItem().toString() 调用返回的文本“android.database.sqlite.SQLiteCursor@435b9ba0”。我不确定为什么。微调器绑定到 SimpleCursorAdapter。

这里是代码

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

和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">
</TextView>

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" />

微调器 xml 看起来像这样

<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" >
</Spinner>

返回的光标是

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

微调器似乎工作正常。当我尝试保存时,这是使用 spinner.getSelectedItem().toString() 作为所选项目的值传递的。

任何人都在这里看到明显的错误。不知道该怎么办。

谢谢 帕特里克

【问题讨论】:

  • 这与 ArrayAdapter 一起正常工作。然后传递的值是类别的文本(业务或个人)。我使用 SimpleCursorAdapter 的事实是否会改变传递值的方式?

标签: android android-widget spinner


【解决方案1】:

您的代码按照您编写的方式运行。 SpinnerAdapterView。您连接到的适配器是SimpleCursorAdapter。这意味着选中的项目是Cursor(定位在光标结果集中与用户选择相对应的项目)。 Cursor 具有 toString() 的默认实现,它返回类似于 android.database.sqlite.SQLiteCursor@435b9ba0 的内容。

由于您没有告诉我们您要做什么,因此无法进一步准确地为您提供建议。但是,无论您想保存什么,都需要从您从getSelectedItem() 获得的Cursor 中提取出来。

【讨论】:

  • 感谢 commonsware,我想你可能已经回答了我的问题。我只是想获取所选项目的值,并将其保存到数据库表中。最初我使用 ArrayAdapter 来填充微调器。该数组是具有几个类别(“业务”、“个人”)的单元素数组。这作为一个字符串被传递。所以你说我需要做一些额外的编码来根据传递的 spinner.getSelectedItemPosition() 从光标中找到实际的类别名称?谢谢帕特里克
  • 是的。鉴于您的query(),您需要在Cursor 上调用getString(1),以返回第二列...假设KEY_CATEGORIES_NAME 是您寻求的值。
【解决方案2】:

我可能会厌烦阅读您的上下文,但只是想简单地提供帮助。 我有一个以DbHelper.KEY_COL 命名的列,并且我正在检索特定行的DbHelper.KEY_COL 值。 也许我的一些代码会有所帮助:

Cursor colCur=(Cursor)spCols.getSelectedItem();
String col=colCur.getString(colCur.getColumnIndex(DbHelper.KEY_COL));

【讨论】: