2012-04-29 4 views
0

그래, 객체의 링크 된 목록에서 안드로이드의 목록보기를 채우려고합니다. 텍스트 파일의 라인을 읽고, 텍스트 파일의 각 라인에서 두 개의 값을 ","로 분리하여 각 값을 오브젝트의 링크 된리스트에 저장합니다. 그런 다음 각 객체의 이름 필드를 가져 와서 목록보기를 채 웁니다. 나는 그것이 안좋은 것을 안다. 나는 안드로이드로 시작하고있다 : E이 시점에서는 전혀 동작하지 않지만 코드에는 오류가 없다.텍스트 파일에서 목록보기를 채우는 중 문제가 발생했습니다. Android

여기에이 ID가 귀하의에서 onCreate 함수의 두번째 라인으로 위의 라인을 넣어

setContentView(R.layout.main); 

에 대한 호출 AFTER 때까지의에 의해 당신은보기를 찾을 수 없습니다 내 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

이고 그것은 효과가있을 것이다.

+0

고마워요. 작동하지만, 여전히 목록보기에 하나의 항목 만 가져옵니다 ... – Tom

+0

루프가 끝나면 목록의 길이를 인쇄하여 두 개 이상의 요소가 있는지 확인하십시오. – 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); 
} 

내가 그들을 왼쪽, 그래서 그들은 각 루프에 제로로 설정되어 있기 때문에 znumFoodItems이 무엇을하는지 너무 확실하지 않다 : 우리는 당신에게 독자 루프를 다시 작성할 수 있습니다. foodlist에있는 식품 품목의 수를 알고 싶다면 foodlist.size();

이 루프를 더 압축 할 수는 있지만 어느 시점에서 가독성을 잃어 버리기 시작하므로 귀하의 선택에 달려 있습니다.

추가

아하, 그건 당신이 numFoodItems으로 무엇을하려고합니다. 의 당신이 values을 구축하는 데 사용하는 루프를 변경하자

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

의 경우 - 각 이와 같은 루프는 오라클에 따르면, 빠르게, 그리고 보너스로 그들은 입력 할 짧다. 이제 ListView에서 둘 이상의 행을 가져올 수 있습니다.

관련 문제