Android 数组方法返回数组,仅返回第一个值?
我正在尝试从sqlLite DB获取列数据,并将该数据放入数组方法中,然后调用该方法并显示数据,由于某些原因,我只获取列中的第一个变量,请帮助 -是的,该列中有更多变量Android 数组方法返回数组,仅返回第一个值?,android,arrays,sqlite,methods,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,
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 TVVTest设置为数据[0]是可行的,但将其设置为数据[1]或其他任何内容都会失败。为什么
tvVVTEST.setText("" + data[0]); //works
//tvVVTEST.setText("" + data[1]); // Does Not Work
看看这个循环:
for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) {
String[] result1 = { "" + c.getString(iName) };
result = result1.clone();
}
return result;
您只需将result1
设置为单个元素数组,然后将result
设置为该数组的克隆。因此,result
将只引用单个元素数组。我建议您使用列表
:
List<String> results = new ArrayList<String>();
for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) {
results.add(c.getString(iName));
}
return results;
List results=new ArrayList();
for(c.moveToFirst();!c.isAfterLast();c.moveToNext()){
结果:添加(c.getString(iName));
}
返回结果;
(更改方法以声明它也返回一个列表
。)
然后您应该能够使用
List<String> data = info.getScore01();
tvVVTest.setText(data.get(1)); // Assuming there *is* a second element
List data=info.getScore01();
tvvtest.setText(data.get(1));//假设有第二个元素
顺便说一句,您似乎在任何需要字符串的地方使用“”+x
。即使x
不是字符串,这也不是一个好主意-使用string.valueOf(x)
代替-但当x
是字符串时,情况更糟
您也不需要到处克隆阵列(或列表)。哦,您应该将info.close()
方法放在finally块中,这样即使抛出异常也可以关闭数据库
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;
添加以下内容:
System.out.println(data.length);
如果它是一个元素,那么您的数组中可能只有一个元素。如果您可以使用for()语法来告诉我这个消息。如果使用while循环,会发生什么
while( c.moveToNext() ) {
在for循环中,打印result1[0]并查看每个迭代中存储的内容,您将准确地知道发生了什么再次返回1元素/你认为语法的
有什么错?在我看来非常正常:初始化、条件、迭代后操作。我已经编辑过检查它一次。如果它解决了问题,请将它标记为Answer。这是可行的,但问题是我需要一个数组(因为我正在将我得到的数组放在列表视图中)我想我可以把列表数组数据转换成数组?@FC_Inter_Fan:你真的需要把它作为数组而不是列表放进去吗?如果是这样,您可以调用list.toArray(新字符串[0])
——但是如果可能的话,我会尽量避免直接使用数组。我需要一个数组来完成这项工作:lviewAdapter=new ListViewAdapter(这个,数据,数字);list.setAdapter(lviewAdapter);lviewAdapter.notifyDataSetChanged();试图将数据库中两个不同列的数据显示在arraylist中