0

わかりましたので、オブジェクトのリンクされたリストから Android のリスト ビューを作成しようとしています。テキスト ファイルから行を読み取り、テキスト ファイルの各行から「,」で区切られた 2 つの値を分割して、これらの各値をオブジェクトのリンク リストに格納しています。次に、各オブジェクトの名前フィールドを取得して、リスト ビューに入力します。私はそれがずさんであることを知っています 私は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);

}

}
4

2 に答える 2

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());
}

Oracle によると、このような For-Each ループはより高速であり、おまけとして、入力する時間が短くなります。これで、ListView に複数の行が表示される場合があります。

于 2012-04-29T19:52:23.400 に答える
0

の呼び出し後まで、ID でビューを見つけることはできません。

setContentView(R.layout.main);

上記の行を onCreate 関数の 2 行目に配置すると、機能します。

于 2012-04-29T19:38:14.110 に答える