2011-11-19 101 views
2

我想从sqlLite数据库获取列数据,并将该数据放入数组方法,然后调用该方法并显示数据,出于某种原因,我只得到我的列中的第一个变量,请帮助!数组方法返回数组,只有第一个值?

- 是有在该列

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设置数据[0]有效,但将其设置为数据[1]或其他任何事情都会失败,原因是什么?

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

,用于循环,打印RESULT1 [0],看看什么东西存储在每个迭代,你就会知道到底发生了什么 – Reno

回答

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

不需要这样的调用。更改为

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

,你们已经宣布结果2 times.Second确保数组值将插入新的位置everytime.Otherwise它会在写,你会得到只有一个值

编辑内环路 变化

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; 
+0

已更改没有解决问题... –

+0

我已编辑检查一次。并且如果它解决了问题,请将其标记为答案 – Sameer

+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块中,这样即使抛出异常也能关闭数据库。

+0

这工作,但问题是,我需要一个数组(因为我'把数组,我iam进入列表视图)我想我可以将列表数组数据转换为数组? –

+0

@FC_Inter_Fan:你真的*需要把它放在一个数组而不是列表中吗?如果是这样,你可以调用'list.toArray(new String [0])' - 但我会尽量避免直接使用数组,如果可能的话。 –

+0

我需要一个数组来执行此操作:\t \t lviewAdapter = new ListViewAdapter(this,data,number); \t \t list.setAdapter(lviewAdapter); \t \t lviewAdapter.notifyDataSetChanged(); 试图从数据库中的2个不同列中的数据显示在列表中 –

0

添加以下内容:

System.out.println(data.length); 

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

+0

是只返回1;/ –

0

如果你可以使用它作为()语法那条消息给我。如果你使用while循环,会发生什么?

while(c.moveToNext()) { 
+0

只返回1个元素;/ –

+0

您认为'for'语法有什么问题?看起来完全正常:初始化,条件,迭代后操作。 –

相关问题