Java 应用程序关闭时出现此错误-请求具有表名的列名

Java 应用程序关闭时出现此错误-请求具有表名的列名,java,android,android-listview,simplecursoradapter,Java,Android,Android Listview,Simplecursoradapter,我正在尝试使用ListAdapter来显示光标的结果。根据我的日志,所有内容都会返回正确的结果,直到达到这一点 ListAdapter adapter = new SimpleCursorAdapter(this,R.layout.cattle_layout, c,new String[]{"c.animal_id, c.eartag"},new int[]{R.id.TextView_cattleId,R.id.TextView_earTag}); 在这一点上

我正在尝试使用ListAdapter来显示光标的结果。根据我的日志,所有内容都会返回正确的结果,直到达到这一点

    ListAdapter adapter = new SimpleCursorAdapter(this,R.layout.cattle_layout,
            c,new String[]{"c.animal_id, c.eartag"},new int[]{R.id.TextView_cattleId,R.id.TextView_earTag});
在这一点上,程序抛出了一个带有上述消息的异常,然后它命名了我想要显示的两个字段——从这一点开始,它的下一个字段是java.lang.exception,然后引用AbstractCursor.getColumnIndexOrThrow

“newstring[]creation”肯定有问题,但我已经搜索过了,找不到任何东西

如有建议,将不胜感激

光标的创建是

        String asColumnsToReturn[] ={
    "tbl_cattle._id",
    "tbl_cattle.animal_id",
    "tbl_cattle.eartag"};

    Cursor c = mDatabase.query(TABLE_CATTLE, asColumnsToReturn,"type_of_animal=?", new String[]{targetType},null, null, null, null);
    Log.i(DEBUG_TAG, "Record Count " + c.getCount() + " Columns: " + c.getColumnCount());
我的日志为where子句提供了正确的计数,记录中有正确的数据

new String[]{"c.animal_id, c.eartag"}

(您将它们作为单个字符串使用。)

另外,如果你不想把所有的东西都塞进一行,那么阅读、调试和维护你的代码就更容易了。“我用更少的行完成了这件事”,这不是任何人真正关心的事情,但是“我记不起这件事应该做什么,而且我无法从阅读中理解它”是一个非常大的问题。

试试看

new String[] { "COLUMNNAME_ANIMAL_ID", "COLUMNNAME_EARTAG" }
其中这两个字符串就是它们的发音。此外,您还应该真正使用静态字符串作为列名。在您的数据库中,将它们定义为:

public final static String COLUMNNAME_ANIMAL_ID = animalId; // where animalId is how the SQL column will be named.
使用
DatabaseClass.COLUMNNAME\u ANIMAL\u ID

在此示例中,您将使用:

new String[] { DatabaseClass.COLUMNNAME_ANIMAL_ID, DatabaseClass.COLUMNNAME_EARTAG }

通过这种方式,您a)可以确保SQL中没有拼写错误,b)可以快速更改列/表/数据库名称,如1,2,3-无论您在何处使用它们。

我遇到了类似的问题,我认为光标可能无法正确检索名称中带有点的列名,而我是通过调用
rawQuer检索到的列名y()


在我遇到代码中的错误之前,我迭代了游标中的所有列,如果一列等于投影,我会记录一条语句,这是真的。在错误发生之前调试并设置断点,我看到的所有列都与我在游标中预期的完全一样。我知道Android在游标中的其他各个点没有正确引用列名他写代码(这很可笑),我认为这个问题与一个类似的问题有关。

发布您的表创建语句。尝试了之后,它失败了,只返回了第一个字符串。您真的应该更清楚您的问题。它修复了引发的异常,对吗?您甚至没有发布使用ListAdapter的代码,我们将如何调试它?对此表示抱歉,这在我的显示器上不是故意的,它是一个非常宽的屏幕,所以看起来不太宽。我没有为ListAdapter添加代码,因为它在到达适配器之前就失败了。不,它没有修复例外情况。我只是用大写字母来说明,您应该使用光标中动物的列名来自的数据。是否确实使用了正确的列名以及布局中是否存在R.id?此外,是否查看了光标是否包含项?发布孔调试堆栈将有所帮助。
new String[] { DatabaseClass.COLUMNNAME_ANIMAL_ID, DatabaseClass.COLUMNNAME_EARTAG }