2016-12-06 46 views
1

我正在使用OpenCSV讀取存儲在設備內部存儲中的CSV文件\G Shop\Input CSV\,名爲product.csv。該文件包含一些隨機產品名稱的單列。我想將每個產品存儲到ArrayList,但我的代碼不起作用。讀取CSV並將數據存儲到ArrayList

下面的代碼:

String baseDirectory = android.os.Environment.getExternalStorageDirectory().getAbsolutePath(); 
File readCsvFolder = new File(baseDirectory + File.separator + "G Shop" + File.separator + "Input CSV" + File.separator); 
String readFileName; 
String readFilePath; 
List<String[]> readData; 

void readCSV() { 
    readCsvFolder.mkdirs(); 

    readFileName = "products.csv"; 
    readFilePath = readCsvFolder.getPath() + File.separator + readFileName; 
    try { 
     ArrayList<String> searchProducts = new ArrayList<>(); 

     readData = new ArrayList<String[]>(); 
     CSVReader reader = new CSVReader(new FileReader(readFilePath)); 
     readData = reader.readAll(); 

     String[] row; 
     while ((row = reader.readNext()) != null) { 
      searchProducts.add(row[0]); 

      //This Toast never shows up! 
      Toast.makeText(mainActContext,"Saved : " + row[0],Toast.LENGTH_SHORT).show(); 
     } 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

我看不出有任何錯誤或警告,根本就沒有輸出的方法被調用後。我會高度讚賞任何形式的幫助或建議:)

+4

什麼是:readData = reader.readAll();所有的數據都被它加載了嗎? –

+0

@ user3380739是的,那是什麼導致了這個問題。 刪除該行後,代碼完美運行。 順便說一句,對不起,最近的回覆,我最近有點忙,也非常感謝你! –

回答

2

readData = reader.readAll();正在讀取整個文件輸入流,直到文件結束。因此row = reader.readNext()) != null將不會給你帶來任何東西;讀者已經到達文件的末尾。相反,您的循環可以簡單地爲:for(String[] row:readData)

for(String[] row:readData) { 
    searchProducts.add(row[0]); 

    //Now the toast shows up! 
    Toast.makeText(mainActContext,"Saved : " + row[0],Toast.LENGTH_SHORT).show(); 
} 
相關問題