我想在我的android應用程序中開發閱讀功能,因此它可以讀取設備中的csv文件。這裏是我的代碼:嘗試讀取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]);
}
}
}
});
}
但是,每當我按一下按鈕,系統意外結束,錯誤消息出現在錯誤日誌,裏面提到空指針異常發生在以下幾行。
Data[numrecord][0]=RowData[0];
Data[numrecord][1]=RowData[1];
Data[numrecord][2]=RowData[2];
Data[numrecord][3]=RowData[3];
有人能告訴我什麼是異常的原因?
我的示例csv文件包含兩行,每行都有四列。只是類似的例子,我做如下:
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++;
}
這就是爲什麼我認爲問題是數據陣列
上
您給出的示例不包含任何逗號,您確定要處理的文件有逗號嗎? – 2012-08-06 07:35:16
我想你必須初始化String [] [] Data;有一些尺寸的 。有點像,String [] [] Data = new String [2] [4]; – user370305 2012-08-06 07:36:43
但是,如果我初始化數組,然後大小是固定的,因爲我想要做的是讀取一個csv文件,它可以有不同數量的行,但固定數量的列。 – Conrad 2012-08-06 07:42:11