私はアプリケーションを持っていて、それにかなり大きなSQLiteデータベース(約5000行の1つのテーブル)をセットアップしようとしています。DBクラスとすべてを構築しました。小規模(400行)でテストしたときにアプリは機能しますが、データベースをインポートしたいときに、見つからないように見えるメモリ不足エラーが発生します。回避する方法。
データベースは最初は私のWebサーバー上のMySQLにあり、奇妙な理由で変換できませんでしたが、クエリを含むテキストファイルを生成して、サイズが11.5MBの5000行すべてを追加することができました。このファイルはアセットフォルダーにあり、DBに配置しようとしています。
public void onHandleIntent(Intent intent) {
DBAdapter db = new DBAdapter(getApplicationContext());
db.open();
try {
InputStream is = getAssets().open("verbs_sql.txt");
db.executeSQL(convertStreamToString(is));
} catch (IOException e) {}
db.close();
// Run main activity
Intent i = new Intent(DatabaseReceiver.this, BaseActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
DatabaseReceiver.this.startActivity(i);
}
public static String convertStreamToString(InputStream is) throws IOException {
Writer writer = new StringWriter();
char[] buffer = new char[2048];
try {
Reader reader = new BufferedReader(new InputStreamReader(is, "UTF-8"));
int n;
while ((n = reader.read(buffer)) != -1) {
writer.write(buffer, 0, n);
}
} finally {
is.close();
}
String text = writer.toString();
return text;
}
}
StringWriter()でメモリ不足エラーが発生するため、その大きなファイルをメモリに配置しているように見えます。どうすればこれを解決できますか?また、5000行すべてをループしようとしましたが、おそらく30秒後に再びメモリが不足しました。