看板 AndroidDev 關於我們 聯絡資訊
大家好 我最近在練習Android的Content Provider時遇到一個問題 我的APP要從手機SDCARD存取檔案(External Storage)存取檔案 也都抓得到file內的資料,也沒亂碼 只是我打算在APP程式選取完該檔案後 進行讀檔的動作 public void readEnglishWordsCSVfile() { tool.CP_delete(); StringBuilder sb = new StringBuilder(); try { BufferedReader br = new BufferedReader(new InputStreamReader( new FileInputStream(tool.getFilepath()) , "UTF-8")); String data = ""; while ((data = br.readLine()) != null) { if(String.valueOf(data.charAt(0)).equals("#")) continue; String[] sarray = data.split(","); String DAY = sarray[8]; String WORD = sarray[0]; String WORDCLASS = sarray[2]; String WORDFREQUENCY = sarray[3]; String WORDMEAN = sarray[1]; String WORDSENTENCE = sarray[4]; String KEYWORD = sarray[5]; String TOPICFOCUS = sarray[6]; String PRON = sarray[7]; ContentValues values = new ContentValues(); values.put(CP.DAY, DAY); values.put(CP.WORD, WORD); values.put(CP.WORDCLASS, WORDCLASS); values.put(CP.WORDFREQUENCY, WORDFREQUENCY); values.put(CP.WORDMEAN, WORDMEAN); values.put(CP.WORDSENTENCE, WORDSENTENCE); values.put(CP.KEYWORD, KEYWORD); values.put(CP.TOPICFOCUS, TOPICFOCUS); values.put(CP.PRON, PRON); Uri uri = getContentResolver().insert(CP.CONTENT_URI, values); Toast.makeText(MainActivity.this, uri.toString(), Toast.LENGTH_LONG).show() } } catch (IOException e) { e.printStackTrace(); } content.setText(sb); } 這是我撰寫的程式碼 while((data=br.readLine()) != null) { ...讀取該行內容,並且insert至資料庫(tool.CP_insert(....)) 以下是Content Provider的insert程式碼 @Override public Uri insert(Uri uri, ContentValues values) { Log.i(TAG, "insert"); long rowID = db.insert(DatabaseHelper.TABLE_NAME, null, values); if (rowID > 0) { Uri _uri = ContentUris.withAppendedId(CONTENT_URI, rowID); getContext().getContentResolver().notifyChange(_uri, null); return _uri; } throw new SQLException("Failed to add a record into " + uri); } 執行時會出現Runtime錯誤 ArrayIndexOutOfBoundsException 似乎是資料量過大 所以我將while迴圈內的contentvalues 和下面的insert資料刪除之後就沒異狀 在onCreate進行單筆insert很正常 沒runtime錯誤 tool.CP_insert("1","2","3","4","5","6","7","8","9"); 能問各位有什麼方法能解決這些問題呢? 我只希望能將file內的檔案資料送至手機的SQLite 我的作法感覺不太正確 我知道程式有點亂 懇請各位指導 感謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 218.164.77.193 ※ 文章網址: http://www.ptt.cc/bbs/AndroidDev/M.1396772055.A.989.html
a4679123:tool 是我另外創立的class(我稱它為我的工具包) 04/06 16:15
slemonade:這錯誤是陣列的索引值超出,初始化陣列時的長度,我看你 04/08 19:42
slemonade:陣列初始化是用spilt,建議先檢查資料是否每筆都一樣,確 04/08 19:42
slemonade:保每個陣列的長度都會一樣 04/08 19:42
a4679123:我的確用split 我有一行資料是,,,,,,也就是空的資料 05/01 00:50
a4679123:以逗點去掉之後變成什麼都沒有 後來用Log才發現這個錯誤 05/01 00:51
a4679123:所以後來修正資料長度 和 排除會有空資料的列之後 05/01 00:51
a4679123:就沒有錯誤了 謝謝大大 05/01 00:51