2012-04-29 94 views
0

好吧,所以我想從一個鏈接的對象列表中填充android中的列表視圖。我正在讀取文本文件中的行,從文本文件的每一行中分割出兩個值,用「,」將這些值存儲到對象的鏈接列表中。然後我拉動每個對象的名稱字段以填充列表視圖。我知道這是馬虎,我剛剛開始與Android:E它現在不會運行,但在代碼中沒有錯誤。從文本文件填充列表視圖的問題Android

這裏是我的activity.java文件

package com.pkuCalc.pkuCalc; 
import java.io.IOException; 
import java.io.BufferedReader; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.util.ArrayList; 
import java.util.LinkedList; 
import java.util.List; 
import android.app.Activity; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 
import android.os.Bundle; 

public class PkuCalcActivity extends Activity { 
    private ListView lv; 
List<Food> foodlist = new LinkedList<Food>(); 
int numFoodItems = 0; 
/** Called when the activity is first created. */ 
@Override 

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    lv = (ListView) findViewById(R.id.listView1); 

    try{ 

     InputStream inputStream = getResources().openRawResource(R.raw.food); 

     if (inputStream != null) { 

      InputStreamReader inputreader = new InputStreamReader(inputStream); 

      BufferedReader r = new BufferedReader(inputreader); 

      String strLine; 

      while ((strLine = r.readLine()) != null) { 
       int z = 0; 
       int length = strLine.length(); 
       int ind = strLine.indexOf(','); 
       String name = ""; 
       for (int i = 0; i < ind; i++) { 
        name = name + strLine.charAt(i); 
       } 
       String sphe = ""; 
       for (int i = ind + 2; i < length; i++) { 
        sphe = sphe + strLine.charAt(i); 
       } 
       int phe = Integer.parseInt(sphe); 

       Food newFood = new Food(name, phe); 
       foodlist.add(newFood); 

       numFoodItems = z; 
       z++; 
      } 

     } 

     inputStream.close(); 

    } catch (IOException e){ //Catch exception if any 
     e.printStackTrace(); 
    } 


    ArrayList<String> values = new ArrayList<String>(); 

    for (int i = 0; i <= numFoodItems; i++) { 
     values.add((foodlist.get(i)).getName()); 
    } 

    ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, values); 
    lv.setAdapter(arrayAdapter); 

    setContentView(R.layout.main); 

} 

} 

回答

0

你不能找到一個視圖通過它的ID,直到調用

setContentView(R.layout.main); 

後把上面的線路中的onCreate功能二號線和它會工作。

+0

謝謝,它得到了它的工作,但我仍然只得到我的listview中的一個項目... – Tom

+0

循環後,使用吐司打印列表的長度,看看是否有超過1個元素。 – JustinDanielson

0

作爲一個建議,一個方便的java函數是String.split(String pattern)。仍假定文本中的每一行總是:字符串,整數。我們可以重新寫你的讀者循環:

while ((strLine = r.readLine()) != null) { 
    String[] pair = strLine.split(","); 
    Food newFood = new Food(pair[0], Integer.parseInt(pair[1])); 
    foodlist.add(newFood); 
} 

我也不太知道什麼z也不numFoodItems正在做的,因爲它們被設置爲零的每個循環,所以我離開了出來。如果您想知道foodlist中有多少食品,您可以隨時致電foodlist.size();

您可以更加濃縮此循環,但在某些時候,您開始失去可讀性,因此取決於您。

加成

啊哈,那就是你正在嘗試與numFoodItems做。讓我們改變用於構建values循環:

for (Food foodItem : foodlist) { 
    values.add(foodItem.getName()); 
} 

的for-each這樣的循環速度更快,據甲骨文,並作爲獎勵,他們是更短的輸入。現在,您可能會在ListView中獲得多行。