应用程序关闭此错误 - 请求具有表名称的列名称

时间:2012-01-29 03:02:45

标签: java android android-listview simplecursoradapter

我正在尝试使用ListAdapter来显示Cursor的结果。根据我的日志,一切都返回正确的结果,直到它到达这一点

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

'new String [] 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子句的正确计数,正确的数据在记录中

3 个答案:

答案 0 :(得分:2)

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

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

(你把它们作为单个字符串。)

此外,如果您没有尝试将所有内容整合到一行中,那么读取,调试和维护代码会更容易。 “我用更少的线条做到了这一点”,这不是任何人真正关心的事情,但是“我不记得这应该做什么,我无法从阅读中弄明白”这是一个非常大的问题。

答案 1 :(得分:0)

我遇到了类似的问题,我认为Cursor可能无法正确检索我通过调用rawQuery()检索到的名称中带有点的列名。例如。 c.animalId无效,但我敢打赌如果您将预测更改为c_animalId它会。它似乎对我有用。

在我在代码中遇到错误之前,我迭代了Cursor中的所有列,如果列等于投影,我会记录一条语句。在错误之前调试和设置断点我完全按照我在Cursor中的预期看到所有列。我知道Android没有在代码中的其他各个方面正确引用列名(这很荒谬),我认为这个问题与类似的问题有关。

答案 2 :(得分:-1)

尝试

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_ANIMAL_ID

从您需要的任何地方调用这些内容

在这个例子中,您将使用:

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

这样你a)可以确定你的SQL中没有拼写错误,b)可以快速更改列/表/ DB名称1,2,3 - 无论你在哪里使用它们。