android - Android Room:DAO 大于 1048576
问题描述
我有 11Mb JSON 文件,这些文件将写入 Dao 但当我保存所有数据时。我收到了这个错误;
/data/user/0/com.test.save/databases/ChannelDb-wal 6946352 bytes: Bigger than 1048576; truncating
我的代码;
AppDatabase dbRoom = Room.databaseBuilder(getApplicationContext(),
AppDatabase.class, Constants.CHANNEL_DB).build();
AndroidNetworking.get(user.getRemote())
.setTag(Constants.GET_CHANNEL_LIST)
.setPriority(Priority.HIGH)
.build()
.getAsOkHttpResponseAndParsed(new TypeToken<List<Channel>>() {
}, new OkHttpResponseAndParsedRequestListener<List<Channel>>() {
@Override
public void onResponse(Response okHttpResponse, List<Channel> channels) {
AsyncTask.execute(() -> dbRoom.channelDao().insertAll(channels));
}
@Override
public void onError(ANError anError) {
Log.d(TAG, "Check 4");
hideProgress();
Toast.makeText(getApplicationContext(), getResources()
.getString(R.string.an_error), Toast.LENGTH_LONG).show();
Crashlytics.log(Log.DEBUG, TAG, anError.getErrorDetail());
}
});
解决方案
这个WAL设置了 1MB 的限制,而 Android 上的光标窗口有 2MB 的硬限制。
因此,即使禁用WAL
.
因为即使您设法以某种方式插入,您也无法再次检索它。
基本上,您有两个可行的选择:
a) 解析 JSON 并将其添加为单独的记录或
b)将文件保存到文件系统并存储它的路径。
推荐阅读
- kubernetes - 使用 OIDC 的 Kubernetes 服务帐户角色
- jenkins - Jenkins 可以运行一些代码还是只调度外部程序?
- wix - WiX:如何显示功能元素的“描述”文本?
- android - 无法在以下项目变体之间进行选择:features:myDynamicFeatureModule:
- java - 触摸功能在 JDK1.8 的 Ubuntu 上不起作用
- python - 如何连接每个形状的两个元组
:(100,1) 到一个元组形状 :(100,2) 使用 python? - excel - 在 VBA ArrayList 中搜索元素
- python - Tensorflow:如何优化训练模型的大小?
- python - Python multipart/form-data 发布请求
- xcode - Xcode 11.1 和 iOS 13.1.3 中未显示能量日志的仪器