【发布时间】:2016-12-21 14:19:00
【问题描述】:
我一直在创建一个词典应用程序,所有单词都保存在 .csv 文件中
当应用程序第一次运行时,此方法应将所有单词保存到领域数据库,但只保存少量。
任务 java.util.concurrent.FutureTask@286858df 从 io.realm.internal.async.RealmThreadPoolExecutor@273caff5 被拒绝[正在运行,池大小 = 13,活动线程 = 13,排队任务 = 100,已完成任务 = 1]
realm = Realm.getDefaultInstance();
//adding to db satrt
if (!(realm.isEmpty())) {
Log.v("DB","already there!!");
} else {
Log.v("DB","Not Found!!");
String csvFile = "longevity.csv";
BufferedReader br = null;
String line = "";
String cvsSplitBy = ",";
try {
br = new BufferedReader(new InputStreamReader(getAssets().open(csvFile)));
while ((line = br.readLine()) != null) {
// use comma as separator
final String[] oneWord= line.split(cvsSplitBy);
realm.executeTransactionAsync(new Realm.Transaction() {
@Override
public void execute(Realm bgRealm) {
Word user = bgRealm.createObject(Word.class);
user.setWord(oneWord[1]);
user.setMeaning(oneWord[2]);
user.setSynonyms(oneWord[3]);
}
}, new Realm.Transaction.OnSuccess() {
@Override
public void onSuccess() {
Log.v("TAGGED","SAVED");
}
}, new Realm.Transaction.OnError() {
@Override
public void onError(Throwable error) {
Log.v("TAGGED","FAILED");
}
});
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (br != null) {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
有没有更好的方法来使用 android 运送预填充的 Relam 数据库, 第一次运行应用程序时,我有 146800 个单词要保存到 db,这种方法只保存几个单词,然后在上面显示错误!
【问题讨论】:
-
你应该在一个事务中运行整个事情,而不是 146800 个事务...
-
是的,只是这样做了,但是编译时间太长了,你知道我怎样才能用领域运送预填充的数据库吗?
-
您可以创建初始数据库并将其与您的应用程序一起分发:realm.io/docs/java/1.1.1/api/io/realm/…