安卓房间 : DAOs bigger than 1048576

标签 android android-sqlite android-room android-database

我有 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) 将文件保存到文件系统并存储它的路径。

关于安卓房间 : DAOs bigger than 1048576,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55111055/

相关文章:

android - 当 room android db 损坏时会发生什么?

android - 为什么我的主要 Activity 没有看到我的底部导航引用?

android 将小时转换为分钟

android - 无法使用 WHERE 子句删除 SQLite 记录

android - 房间。第一个查询返回空值

android - 使用 Green-DAO 持久化双向实体

android - 调用 onActivityResult 后 Activity 关闭

java - 仅使用 Java 从数据库填充微调器?

android - 如何正确构造带有继承的房间实体

android - 在 Android 的 Room 库中重置自动增量