Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.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_Arrays_Sqlite_Methods - Fatal编程技术网

Android 数组方法返回数组,仅返回第一个值?

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,

我正在尝试从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 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中