0

Android (Eclipse) を使用して、.csv ファイルを読み取り、スキャナーを使用してスピナーに動的にデータを入力しようとしています。同じ結果で多くの方法を試しました。エミュレーターには Spinner が表示されますが、最後のコンマと価格のみが入力されます。また、3 つの変数すべてを配列に格納し、スピナーの選択時に EditText フィールドにデータを入力するためにそれらを取得する必要があります。どんな援助も大歓迎です...

データ ファイル レコード:

4、アルミ缶、.55 5、Cat コンバーター付き車両、9.00 18、真ちゅう (アイロニーレッド/イエロー)、.20 1001、控除 顧客番号ルックアップ、-2.00

ジャワ:

public class BRprogramActivity extends Activity {
    private static final String TAG = null;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        //
        Button addButton;
        Button editButton;
        Button sendButton;
        //  
        Spinner array_spinner;
        //
        //      activate soft Keyboard
        this.getWindow().setSoftInputMode
        (WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE); 
        //
        //      .csv comma separated values file
        //        
        try {
            Scanner scanner = new Scanner(getResources().openRawResource(R.raw.brdata));  
            //         
            while (scanner.hasNext()) {
                String data = (scanner.next());
                String [] values = data.split(",");
                item = values[0];              
                description = values[1];
                price = values[2];    
                //  
                array_spinner = (Spinner)findViewById(R.id.spinner1);         
                ArrayAdapter<String> adapter = new ArrayAdapter<String>
                (this,android.R.layout.simple_spinner_item,values);
                array_spinner.setAdapter(adapter); 
            }       
            scanner.close();

        }   catch (Exception e) {
            Log.e(TAG, "Exception: "+Log.getStackTraceString(e));
        }
        //
        addButton = (Button) findViewById(R.id.addbutton);

        addButton.setOnClickListener(new OnClickListener(){
            public void onClick(View v){
                Log.v("test", "ADD button clicked");
            }
        });
        //
        editButton = (Button) findViewById(R.id.editbutton);

        editButton.setOnClickListener(new OnClickListener(){
            public void onClick(View v){
                Log.v("test", "EDIT button clicked");
            }
        });    
        //
        sendButton = (Button) findViewById(R.id.sendbutton);

        sendButton.setOnClickListener(new OnClickListener(){
            public void onClick(View v){
                Log.v("test", "SEND button clicked");
            }
        });
    }
}  
4

1 に答える 1

0

CSV の各行をスピナーの 1 行に表示する場合は、次のようにします。

List<String> list = new ArrayList<String>();
while (scanner.hasNext()) {
    list.add(scanner.next());
}

array_spinner = (Spinner)findViewById(R.id.spinner1);         
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, list);
array_spinner.setAdapter(adapter); 

通常のユーザーにとっては読みにくいですが、おそらく説明と価格だけを表示したいでしょう:

List<String> list = new ArrayList<String>();
while (scanner.hasNext()) {
    String data = scanner.next();
    String [] values = data.split(",");
    list.add(values[1] + "  $" + values[2]);
}       

CSV の各行に対して新しい ArrayAdapter を作成し、作成した以前のアダプターをオーバーライドしていたため、投稿されたメソッドは最後の CSV 行のみを表示しました。

Scanner の結果を List に格納し、アダプタの定義を Scanner ループの外に移動することで、希望どおりの結果を表示できるはずです。

コメントからの追加

length=2、index=2 の OutOfBounds 例外は、実際の CSV の少なくとも 1 つの行に 2 つの値 (1 つのカンマ) しかないことを示しています。その行を見つけるのを助けるために、これを試してください:

if(values.length != 3)
    Log.v("Example", "Malformed row: " + data);
else
    list.add(values[1] + "  $" + values[2]);

また、Spinner のドロップダウン レイアウトを設定していないことを忘れていました。これによりアプリがクラッシュすることはありませんが、標準のユーザー インターフェイスが作成されます。

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, list);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
于 2012-07-06T18:44:34.217 に答える