Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/211.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android:将光标的每一列转换为字符串数组_Android_Cursor - Fatal编程技术网

Android:将光标的每一列转换为字符串数组

Android:将光标的每一列转换为字符串数组,android,cursor,Android,Cursor,假设这是我的代码 Cursor mCursor = dbAdapter.getAllTitles(); //returns results from 3 columns, eg column1, column2, column3 我是否可以将列1的值分配给字符串数组1,列2的值分配给另一个,依此类推?也许是这样 String[] getColumn1 = mCursor.dataFrom("column1"); String[] getColumn2 = mCursor.dataFrom("c

假设这是我的代码

Cursor mCursor = dbAdapter.getAllTitles(); //returns results from 3 columns, eg column1, column2, column3
我是否可以将列1的值分配给字符串数组1,列2的值分配给另一个,依此类推?也许是这样

String[] getColumn1 = mCursor.dataFrom("column1");
String[] getColumn2 = mCursor.dataFrom("column2");
String[] getColumn3 = mCursor.dataFrom("column3");
我看到的实现上述相同结果的示例包括迭代这些值并将它们放入相应的数组中。太多的资源消耗,不是吗?然后最好对每一列进行单独的sql查询,否?

我发现正确,但我会在for循环中更改这一行:

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));
}
for(mCursor.moveToFirst(); mCursor.moveToNext(); mCursor.isAfterLast())
为此:

for(cursor.moveToFirst(); !cursor.isAfterLast();cursor.moveToNext() )
因为中间语句是检查是否继续循环的语句。这可能在接受答案的评论中得到回答


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

不使用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());
}

这也适用于原语数组

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

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")));
    }
}

正如其他几个答案所说,我同意这基本上是正确的,但我认为实现循环的更简单、更安全的方法是像这样的while循环:

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());
            }
        } 
然后可以像中那样转换数组


你的模式是什么?为什么需要将列值分配给字符串数组?模式是什么意思?假设我需要将列值分配给一个strings数组,这个数组将它转换为ArrayList right。。例如,如何将其转换为可以插入String[]getColumn中的内容?您可以将ArrayList转换为字符串数组。例如:String[]colStrArray1=String[]columnArray1.toArraynew String[columnArray1.size];嘿,Dyonisos,我也在尝试做同样的事情,但是columnArray1.addmCursor.getStringColumn_INDEX1;列索引给我错误,无法将其更改为字符串。很抱歉,我碰到了一个老问题和答案,但是这个问题有一个障碍——第一个总是被忽略。我不知道这是查询选择的问题,还是这个系统。。。
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());
            }
        } 
String[] colStrArr1 = (String[]) columnArray1.toArray(new String[columnArray1.size()]);