跨多个Android版本实现SharedPreferences

Bri*_*ham 1 android backwards-compatibility

对于我的应用程序,我有一个自定义实现SharedPreferences.

在API级别9中,apply方法已添加到SharedPreferences.Editor界面中.

但是,VerifyError如果我将该方法添加到我的实现并尝试使用它,Android 1.6会抛出一个.

以向后兼容的方式使这项工作的最佳方法是什么?

编辑:

我应该澄清我的难题.在我切换到目标Gingerbread之前,我的实现SharedPreferences.Editor没有包含该apply方法.切换目标后,由于我的实现中缺少该方法,因此停止编译.

添加该方法的实现修复了编译问题,但又添加了一个新问题:Android 1.6甚至不会加载该类,抛出一个VerifyError.即使我发现错误,我的自定义实现也永远不会加载到1.6.

到目前为止,我最好的想法是使我自己的接口与SharedPreferences和SharedPreferences.Editor相同,并实现它们.当然,这需要在整个代码中进行彻底的更改,所以我尽量避免使用它.

Com*_*are 6

如果您愿意放弃Android 1.x支持,您可以将其置于if ()测试中,类似于:

if (Build.VERSION.SDK_INT>=Build.VERSION_CODES.GINGERBREAD) {
    editor.apply();
}
else {
    editor.commit();
}
Run Code Online (Sandbox Code Playgroud)

但是,如果你真的需要支持回到Android 1.6,那么你需要在一个只在新API设备上加载的类中隔离新的API代码,即所谓的"条件类加载"技术.

这是一个示例项目,演示如何使用此技术解决您的问题.