作者a4679123 (就这样吧)
看板AndroidDev
标题[问题] 关於APP外存读档与输入SQLite资料库
时间Sun Apr 6 16:14:10 2014
大家好
我最近在练习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://webptt.com/cn.aspx?n=bbs/AndroidDev/M.1396772055.A.989.html
1F:→ a4679123:tool 是我另外创立的class(我称它为我的工具包) 04/06 16:15
2F:推 slemonade:这错误是阵列的索引值超出,初始化阵列时的长度,我看你 04/08 19:42
3F:→ slemonade:阵列初始化是用spilt,建议先检查资料是否每笔都一样,确 04/08 19:42
4F:→ slemonade:保每个阵列的长度都会一样 04/08 19:42
5F:→ a4679123:我的确用split 我有一行资料是,,,,,,也就是空的资料 05/01 00:50
6F:→ a4679123:以逗点去掉之後变成什麽都没有 後来用Log才发现这个错误 05/01 00:51
7F:→ a4679123:所以後来修正资料长度 和 排除会有空资料的列之後 05/01 00:51
8F:→ a4679123:就没有错误了 谢谢大大 05/01 00:51