从一行光标中提取信息 - Android SQLite

时间:2014-08-23 07:12:33

标签: android string android-sqlite android-cursor

我有这个问题,我试图填充String []的东西,但我这样做的方式是行不通的。到目前为止,我的应用程序获取XML数据,解析它,将其推送到单独的表中,并在列表中显示Items。我正在研究详细的视图,这就是我被困住的地方。我一直得到一个nullpointer异常错误,因为即使String []具有正确数量的'slots'(我已经检查过这个),它们也是null。

这是功能:

public String[] getDetails(String id, int param){

    Cursor cursor = getDetailsCursor(id, param);

    String[] details = new String[cursor.getColumnCount()];
    int itty=0;

    if (cursor.moveToFirst()){
           do{
              details[itty] = cursor.getString(itty);

              itty++;
           }while(cursor.moveToPosition(itty));
        }
        cursor.close();

    return details;

}

在我们问之前:这是正确的光标,从有时通过的信息和ColumnCount,我知道它是正确的光标。

我之前问你们这些问题,你们似乎很快意识到它是什么。这可能是我对这个小项目的最后一个问题。

更新

    public String[] getDetails(String id, int param){

    Cursor cursor = getDetailsCursor(id, param);

    String[] details = new String[cursor.getColumnCount()] , names = new String[cursor.getColumnCount()];

    int i=0;

    cursor.moveToFirst();

    names = cursor.getColumnNames();

    cursor.moveToFirst();

    for(i=0;i < names.length;i++){
        details[i] = cursor.getString(cursor.getColumnIndex(names[i]));
    }

        cursor.close();

    return details;

}

这是我目前的代码。我将尝试您的解决方案,看看它们是否具有相同的结果。

2 个答案:

答案 0 :(得分:2)

Cursor方法moveTo...移动您正在处理的行,而不是列。将int传递给getString(...)上的电话会定义列号。你基本上需要做这样的事情......

if (cursor.moveToFirst()) {
    for (int itty = 0; itty < cursor.getColumnCount(); itty++) {
        details[itty] = cursor.getString(itty);
    }
}

答案 1 :(得分:1)

cursor.moveToPosition或cusor.moveToNext迭代行。如果您想阅读行中的所有列,请按照以下代码进行操作。

public String[] getDetails(String id, int param){
 Cursor cursor = getDetailsCursor(id, param);
 if (cursor!= null && cursor.moveToFirst()){
  int columnCount = cursor.getColumnCount();

// below while loop will execute only once if there is only one row.

//如果您确定只有一行,则不需要循环。这个逻辑可以 //可以扩展以创建String数组列表。

  do{
    String[] details = new String[columnCount];
    for(int i=0;i<columnCount;i++){
        details[i] = cursor.getString(i);
    }
// Now details array has information of all columns in current row.

  }while(cursor.moveToNext());
 }
 cursor.close();
 return details;
}