【问题标题】:Problem casting result from SQLite database into EditText从 SQLite 数据库转换结果到 EditText 的问题
【发布时间】:2011-06-25 23:29:47
【问题描述】:

我有一个包含 3 个表的数据库。它们是“项目”、“联系人”和“项目类型”。我有一个 UI 用于创建(添加记录)一个新项目,该项目将记录添加到“项目”表中。在那个 UI 中,我有一个按钮可以从“联系人”表中获取联系人姓名,该表依次显示所有联系人的 ListView。选择名称后,它应该返回到 Projects UI,并且名称必须显示在 EditText 中。但是,我一直在 EditText 中得到这个:android.database.sqlite.SQLiteCursor@43d34310

我将代码 sn-ps 附加到帖子以寻求建议。

ListActivity onCreate() 代码:

public class ContactsList extends ListActivity {
DBAdapter dbContactList;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.editproject_list);

    dbContactList = new DBAdapter(this);
    // Pull the data from the database
    String[] fields = new String[]    {    dbContactList.TABLE_CON_NAME    };
    int[] views = new int[]    {    android.R.id.text1    };

    Cursor c = dbContactList.getAllContacts();
    startManagingCursor(c);

    // Set the ListView
    ListAdapter prjName = new SimpleCursorAdapter(this,
            android.R.layout.simple_list_item_1, c, fields, views);
    setListAdapter(prjName);

    dbContactList.close();
}

onListItemClick 代码:

@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
    super.onListItemClick(l, v, position, id);
    // Get the item that was clicked

    Intent selectedContact = new Intent();

    Object o = this.getListAdapter().getItem(position);
    String keyword = o.toString();

    selectedContact.putExtra("selectedcontact", keyword);

    setResult(RESULT_OK, selectedContact);
    finish();

}

以及用于启动 ListView 活动并获取结果的 Projects UI 代码:

public void onClickContactPicker(View target)
{
    Intent contactPicker = new Intent(this, com.dzinesunlimited.quotetogo.ContactsList.class);
    startActivityForResult(contactPicker, contact);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    String contact = data.getExtras().getString("selectedcontact").toString();

    ((EditText)findViewById(R.id.txtProjectContacts)).setText(contact);
}

这是来自 DB 适配器的 query()

public Cursor getAllContacts()
{
    Cursor cursor = null;

    try
    {
        cursor = db.query(TABLE_CONTACTS, new String[] {  
                TABLE_CON_ID, TABLE_CON_NAME, TABLE_CON_EMAIL,
                TABLE_CON_EXPERTISE, TABLE_CON_CHARGES}, 
                null,
                null, 
                null, 
                null, 
                null);
    }
    catch (SQLiteException e)
    {
        Log.e("Database.addRow", "Database Error: " + e.toString());
        e.printStackTrace();
    }

    return cursor;
}

请提供解决方案。

提前致谢。

【问题讨论】:

  • 您确定您请求的字段是正确的吗?
  • 我不确定你的意思。但是,如果您的意思是将其投射到正确的 EditText 上,是的。在尝试将它投射到 EditText 之前,我还使用了一个 toast,但它仍然在 toast 中显示相同的结果。哦,我的坏。是的先生。我在查询中请求正确的字段。让我添加适配器 query() 以供参考。

标签: android sqlite android-edittext


【解决方案1】:

对象o = this.getListAdapter().getItem(position);

此时,oCursor,位于正确的行。

字符串关键字 = o.toString();

此时,keyword 将类似于android.database.sqlite.SQLiteCursor@43d34310,因为这是您在Cursor 上调用toString() 时得到的结果。

也许你应该用一些列索引来调用getString()

【讨论】:

  • 这是否意味着我将 o.toString() 替换为 o.getString(1)?我对 android 开发还不太熟悉,而且还是一个初学者,正如你现在所发现的那样。非常感谢所有帮助。
  • @Siddharth Lele:如果1 列包含您希望在EditText 中显示的值,那么,是的,o.getString(1) 就是您想要的。
  • 先生,我现在真的很困惑。我根本没有 o.getString 的选项。有没有可以建议的替代解决方案来代替我正在使用的解决方案?也许是某种教程的链接?我正在关注一个类似的帖子,您在其中回答了类似的问题,但我真的无法从中脱颖而出:stackoverflow.com/questions/2075762/…。我意识到我可能要求的太多了。
  • @Siddharth Lele:那是因为你声明 o 是一个对象。改为将其声明为光标。如果您是 Java 新手,我强烈建议您在学习 Android 之前花几个月的时间学习 Java。这是一篇博文,我在其中概述了成为一名有效的 Android 开发人员所需的 Java 概念:commonsware.com/blog/2010/08/02/java-good-parts-version.html
  • 天哪。这就像一个魅力。先生,我感激不尽。谢谢你。你一直是一个救生员先生!!!!!!!我也采纳了您对学习 Java 的建议。您的链接已为好先生添加了书签。再次感谢一堆。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-03-19
  • 1970-01-01
  • 1970-01-01
  • 2013-05-06
  • 1970-01-01
  • 2011-03-06
  • 1970-01-01
相关资源
最近更新 更多