Android:将游标的每一列转换为String数组

时间:2012-01-20 08:56:09

标签: android cursor

让我们说这是我的代码

Cursor mCursor = dbAdapter.getAllTitles(); //returns results from 3 columns, eg column1, column2, column3

无论如何我可以将column1中的值分配给1个字符串数组,将column2分配给另一个,依此类推?或许像这样

String[] getColumn1 = mCursor.dataFrom("column1");
String[] getColumn2 = mCursor.dataFrom("column2");
String[] getColumn3 = mCursor.dataFrom("column3");

示例我看到实现与上面相同的结果涉及迭代值并将它们放入相应的数组中。资源消耗太多,不是吗?那么最好为每列做单独的sql查询,不是吗?

5 个答案:

答案 0 :(得分:4)

ArrayList<String> columnArray1 = new ArrayList<String>();
ArrayList<String> columnArray2 = new ArrayList<String>();
ArrayList<String> columnArray3 = new ArrayList<String>();
for(mCursor.moveToFirst(); mCursor.isAfterLast(); mCursor.moveToNext()) {
    columnArray1.add(mCursor.getString(COLUM_INDEX1));
    columnArray2.add(mCursor.getString(COLUM_INDEX2));
    columnArray3.add(mCursor.getString(COLUM_INDEX3));
}

之后,您可以将ArrayList转换为String数组:

String[] colStrArr1 = (String[]) columnArray1.toArray(new String[columnArray1.size()]);

答案 1 :(得分:4)

我发现answer posted by Dyonisos是正确的,除了我会在for循环中改变这一行:

for(mCursor.moveToFirst(); mCursor.moveToNext(); mCursor.isAfterLast())

到此:

for(cursor.moveToFirst(); !cursor.isAfterLast();cursor.moveToNext() )

因为中间语句是检查是否继续循环的语句。这可以在接受的答案的评论中回答Liam W's question

免责声明:我知道这应该是一个评论,但我没有足够的声誉来制作一个,这些信息可能对将来寻找此信息的其他人有用=)

答案 2 :(得分:0)

不使用ArrayList的另一种方法:

final int size = mCursor.getCount();
mArray1 = new String[size];
mArray2 = new String[size];
mArray3 = new String[size];

if (mCursor.moveToFirst) {
    int i = 0;
    do {
        mArray1[i] = mCursor.getString(COLUMN_INDEX_1);
        mArray2[i] = mCursor.getString(COLUMN_INDEX_2);
        mArray3[i] = mCursor.getString(COLUMN_INDEX_3);
        i++;
    } while (mCursor.moveToNext());
}

这也适用于基元数组

答案 3 :(得分:0)

实际上,将光标转换为数组很容易。使用此方法:

private void initializeArrays(Cursor c) {
    collumn1 = new String[c.getCount()];
    collumn2 = new String[c.getCount()];
    for(c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) {
        Array.set(collumn1, c.getPosition(), c.getString(c.getColumnIndex(""collum1")));
        Array.set(collumn2, c.getPosition(), c.getString(c.getColumnIndex("collumn2")));
    }
}

答案 4 :(得分:0)

正如其他几个答案所说,我同意dyonisos's answer基本上是正确的,但我认为实现循环的一种更简单的方法(更安全的方式)是这样的while循环:< / p>

while (mcursor.moveToNext()){
            try {
                columnArray1.add(cursor.getString(1));
                columnArray2.add(cursor.getString(2));
                columnArray3.add(cursor.getString(3));
                 ...
            }catch(Exception e) {
                Log.d("error",e.toString());
            }
        } 

然后可以像the previously cited answer一样转换数组。

String[] colStrArr1 = (String[]) columnArray1.toArray(new String[columnArray1.size()]);