1

Androidアプリで読み取り機能を開発したいので、デバイスでcsvファイルを読み取ることができます。これが私のコードです:

Button btninsert;
TextView CSV1;
TextView CSV2;
TextView CSV3;
TextView CSV4;
String[][] Data;
int numrecord=0;

@Override
public void onCreate(Bundle savedInstanceState) {

    //create the activity
    super.onCreate(savedInstanceState);

    //set up the layout
    setContentView(R.layout.activity_chico);
    btninsert = (Button) findViewById(R.id.Insert);
    CSV1 = (TextView) findViewById(R.id.CSV1);
    CSV2 = (TextView) findViewById(R.id.CSV2);
    CSV3 = (TextView) findViewById(R.id.CSV3);
    CSV4 = (TextView) findViewById(R.id.CSV4);
    if(new File(Environment.getExternalStorageDirectory()+"/Chico/record.csv").exists()){
        btninsert.setVisibility(View.VISIBLE);
    }else{
        btninsert.setVisibility(View.GONE);         
    }
    CSV1.setVisibility(View.GONE);
    CSV2.setVisibility(View.GONE);
    CSV3.setVisibility(View.GONE);
    CSV4.setVisibility(View.GONE);

    btninsert.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            btninsert.setVisibility(View.GONE);
            try {
                BufferedReader reader = new BufferedReader(new FileReader(Environment.getExternalStorageDirectory()+"/Chico/record.csv"));
                try {
                    String line;
                    while ((line = reader.readLine()) != null){
                        String[] RowData = line.split(",");
                        Data[numrecord][0]=RowData[0];
                        Data[numrecord][1]=RowData[1];
                        Data[numrecord][2]=RowData[2];
                        Data[numrecord][3]=RowData[3];
                        numrecord++;
                    }
                } catch (IOException ex) {

                }
            } catch (FileNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            for(int i=0; i<numrecord; i++){
                if(i==0){
                    CSV1.setVisibility(View.VISIBLE);
                    CSV2.setVisibility(View.VISIBLE);
                    CSV3.setVisibility(View.VISIBLE);
                    CSV4.setVisibility(View.VISIBLE);

                    CSV1.setText(Data[i][0]);
                    CSV2.setText(Data[i][1]);
                    CSV3.setText(Data[i][2]);
                    CSV4.setText(Data[i][3]);
                }else{
                    CSV1.append(" "+Data[i][0]);
                    CSV2.setText(" "+Data[i][1]);
                    CSV3.setText(" "+Data[i][2]);
                    CSV4.setText(" "+Data[i][3]);
                }
            }
        }
    });
}

しかし、ボタンをクリックするたびに、システムが予期せず終了し、エラー ログにエラー メッセージが表示され、次の数行で null ポインター例外が発生することが示されます。

Data[numrecord][0]=RowData[0];
Data[numrecord][1]=RowData[1];
Data[numrecord][2]=RowData[2];
Data[numrecord][3]=RowData[3];

誰かが例外の原因を教えてもらえますか?

サンプルの csv ファイルには 2 つの行が含まれ、それぞれに 4 つの列があります。私が以下に作る例にちょうど似ています:

1 1 in 8/6/2012
1 1 out 8/6/2012

while ループで次のコードを使用すると、正常に動作します。

while ((line = reader.readLine()) != null){
    String[] RowData = line.split(",");
    if(numrecord==0) {
        CSV1.setText(RowData[0]);
        CSV2.setText(RowData[1]);
        CSV3.setText(RowData[2]);
        CSV4.setText(RowData[3]);
    } else {
        CSV1.append(" "+RowData[0]);
        CSV2.append(" "+RowData[1]);
        CSV3.append(" "+RowData[2]);
        CSV4.append(" "+RowData[3]);
    }
    numrecord++;
}

そのため、問題はデータ配列にあると思います

4

1 に答える 1

3

の配列を作成していませString[]

このようなもの:

String[][] Data;
Data=new String[100];
Data[0]=new String[10];
Data[1]=new String[10];

List<T>配列の代わりに使用することをお勧めします。

List<String[]> list;

list=new ArrayList<String>();

 while ((line = reader.readLine()) != null){
     String[] RowData = line.split(",");
     list.add(RowData);
 }
于 2012-08-06T07:37:24.970 に答える