Android会议室:DAO大于1048576

问题描述 投票:2回答:1

我有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());
            }
        });
android android-sqlite android-room android-database
1个回答
3
投票

这个WAL设置的限制为1MB,而Android上的光标窗口的硬限制为2MB。

因此,即使禁用WAL,它也是毫无意义的,你想要实现的目标。

因为即使你设法以某种方式插入,你也无法再次检索。

基本上,你有两个合理的选择:

a)解析JSON并将其添加为单个记录或

b)将文件保存到文件系统并存储它的路径。

© www.soinside.com 2019 - 2024. All rights reserved.