Array方法返回Array,只有第一个值?

时间:2011-11-19 07:42:12

标签: android arrays sqlite methods

我正在尝试从sqlLite DB获取列数据并将该数据放入数组方法然后调用该方法并显示数据,由于某种原因,我只获取了我的列中的第一个变量,请帮助! !

- 那列中有更多变量

    public String[] getScore01() {

    String[] column1 = new String[] { KEY_NAME };
    Cursor c = ourDatabase.query(DATABASE_TABLE, column1, null, null, null,
            null, null);
    String[] result = {};

    int iName = c.getColumnIndex(KEY_NAME);

    for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) {

        String[] result1 = { "" + c.getString(iName) };

        result = result1.clone();
    }
    return result;
}

在这里我们调用该方法并将数据设置为数组...

        Database info = new Database(this);

    info.open();
    String[] data = info.getScore01().clone();
    info.close();

将textview tvVVTEST设置为data [0]有效,但将其设置为data [1]或其他任何内容都会失败,为什么???

        tvVVTEST.setText("" + data[0]); //works
      //tvVVTEST.setText("" + data[1]); // Does Not Work

4 个答案:

答案 0 :(得分:2)

看看这个循环:

for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) {

    String[] result1 = { "" + c.getString(iName) };

    result = result1.clone();
}
return result;

您只需将result1设置为单个元素数组,然后result设置为该数组的克隆。因此result只会引用单元素数组。我建议您使用List<String>代替:

List<String> results = new ArrayList<String>();
for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) {
    results.add(c.getString(iName));
}
return results;

(更改方法以声明它也返回List<String>。)

然后您应该可以使用

List<String> data = info.getScore01();
tvVVTest.setText(data.get(1)); // Assuming there *is* a second element

顺便说一下,您似乎在任何想要字符串的地方使用"" + x。即使x 不是字符串,这也是一个坏主意 - 使用String.valueOf(x)代替 - 但是当x 时更糟糕一个字符串。

您也不需要在整个地方克隆数组(或列表)。哦,你应该将info.close()方法放在finally块中,这样即使抛出异常也会关闭数据库。

答案 1 :(得分:1)

info.open();
String[] data = info.getScore01().clone();
info.close();

无需像这样打电话。将其更改为

info.open();
String[] data = info.getScore01();
info.close();

并且你已经两次声明了结果。第二次确保每次都会在新位置插入数组值。否则它将重写,你将只获得一个值

<强>被修改 将循环内部更改为

where you declare String [] result, Change to String []result=new String[c.getCount()];
 int i=0;
for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) {

    result1[i] = c.getString(iName);
    i++;
}
return result;

答案 2 :(得分:0)

添加以下内容:

System.out.println(data.length);

如果是那个,那么你的数组中可能只有一个元素。

答案 3 :(得分:0)

如果你可以使用那个for()语法给我发消息。如果你使用while循环会发生什么?

while( c.moveToNext() ) {