我正在尝试从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
答案 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() ) {