首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >StrictModeDiskReadViolation when

StrictModeDiskReadViolation when
EN

Stack Overflow用户
提问于 2012-11-10 23:41:04
回答 2查看 28.8K关注 0票数 15

我正在尝试使用SharedPreferences为我的应用程序存储一些用户设置。我的Activity.onCreate方法中有以下代码:

代码语言:javascript
复制
sharedPreferences = context.getSharedPreferences("MMPreferences", 0);
soundOn = sharedPreferences.getBoolean("soundOn", true);

但是它给了我这个错误(生成这个错误的是getBoolean ):

代码语言:javascript
复制
11-10 16:32:24.652: D/StrictMode(706): StrictMode policy violation; ~duration=229 ms: android.os.StrictMode$StrictModeDiskReadViolation: policy=2079 violation=2

结果是这个值没有被读取,当我尝试用这段代码写SharedPreferences时,我也得到了同样的错误(是提交产生了错误):

代码语言:javascript
复制
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putBoolean("soundOn", soundOn);
editor.commit();

对于这个错误,我能找到的唯一答案是关于严格模式警告,但我的代码实际上无法读/写SharedPreferences键/值数据。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-10 23:43:24

您必须在单独的线程上执行fileSystem操作,然后错误就会消失。

您也可以关闭StrictMode (但我不建议这样做)

代码语言:javascript
复制
StrictMode.ThreadPolicy old = StrictMode.getThreadPolicy();
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder(old)
    .permitDiskWrites()
    .build());
doCorrectStuffThatWritesToDisk();
StrictMode.setThreadPolicy(old);
票数 19
EN

Stack Overflow用户

发布于 2016-05-19 10:50:54

如果你在你的安卓项目中配置了reactive (RxJava),你可以利用它的属性,比如在特定于I/O的Scheduler上调度一个任务,例如:

代码语言:javascript
复制
public void saveFavorites(List<String> favorites) {
    Schedulers.io().createWorker().schedule(() -> {
        SharedPreferences.Editor editor = mSharedPreferences.edit();
        Gson gson = new Gson();
        String jsonFavorites = gson.toJson(favorites);
        editor.putString(Constants.FAVORITE, jsonFavorites);
        editor.apply();
    });
}
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13323431

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档