【问题标题】:problems populating list view from text file Android从文本文件Android填充列表视图的问题
【发布时间】:2012-04-29 19:36:00
【问题描述】:

好的,所以我试图从对象的链接列表中填充 android 中的列表视图。我正在从文本文件中读取行,从文本文件的每一行中拆分出两个值,用“,”分隔,将这些值中的每一个存储到对象的链接列表中。然后我拉出每个对象的名称字段来填充列表视图。我知道这很草率,我刚开始使用 Android :E 它现在根本无法运行,但代码中没有错误。

这是我的 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);

}

}

【问题讨论】:

    标签: android arrays listview text linked-list


    【解决方案1】:

    在调用

    之前,您无法通过其 ID 找到视图
    setContentView(R.layout.main);
    

    将上面的行作为 onCreate 函数的第 2 行,它将起作用。

    【讨论】:

    • 循环结束后,使用toast打印list的长度,看是否有超过1个元素。
    【解决方案2】:

    作为建议,一个方便的 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());
    }
    

    根据 Oracle 的说法,像这样的 For-Each 循环更快,而且它们的键入时间更短。现在您的 ListView 中可能会出现不止一行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-30
      • 2015-03-30
      • 1970-01-01
      • 2015-08-31
      • 1970-01-01
      • 2011-04-20
      • 2021-04-29
      • 2016-10-15
      相关资源
      最近更新 更多