2011-11-19 149 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'語法有什麼問題?看起來完全正常:初始化,條件,迭代後操作。 –

相關問題