key 不存在也是设置的一种存在状态
2009-12-07 16:59
302 查看
在 Android 程序中要存取系统设置时可以用
其中 Type 可以为 Int,Float,String 等,key 是 android.provider.Settings.System 中定义的常量。比如下面的代码可以取得系统的 Wi-Fi 连接是否启用的静态 IP 设置:
但是 System.getType(contentResolver, key) 系列函数会抛出 SettingNotFoundException 异常。也就是说在查询不到此 key 对应的 value 时会抛出异常,我们应该把上述代码用 try ... catch ... 包起来。当然,System.getType(contentResolver, key, def) 在大多数情况下或许更方便。
总体来说,这个过程并没有什么复杂的地方,但是如果深究一下,为什么明确地写在文档里面的 key 在运行时会有取不到的可能性呢?其实这个问题我之前也考虑过,但没有多想,想当然地认为这样的 API 设计只是“为了看起来更严谨吧”(现在想想,多么幼稚的想法,哈哈)。直到今天我才明白这些设置如果保持初始的默认值一直没有改动过的话他们对应的 key 在系统数据库中就不存在!比如你的手机自从出厂(或上次重装系统)到现在压根没有设置过静态 IP 选项(“Use static IP" 默认是关闭的),那么 WIFI_USE_STATIC_IP 在系统设置数据库中就不存在。也就是说 key 不存在也是设置的一种存在状态,这句话说起来有点拗口,呵呵。
当然,这些 key 不存在还有一种可能性:某些设备没有实现某个功能。比如某款手机没有 Wi-Fi 芯片或压根不支持静态 IP(只是举个例子)也可以在查询 WIFI_USE_STATIC_IP 时抛出 SettingNotFoundException 异常(??)。我对这个不成熟的观点持严重的怀疑态度。
android.provider.Settings.System.getType(key); android.provider.Settings.System.putType(key);
其中 Type 可以为 Int,Float,String 等,key 是 android.provider.Settings.System 中定义的常量。比如下面的代码可以取得系统的 Wi-Fi 连接是否启用的静态 IP 设置:
System.getInt(contentResolver, System.WIFI_USE_STATIC_IP) == 1;
但是 System.getType(contentResolver, key) 系列函数会抛出 SettingNotFoundException 异常。也就是说在查询不到此 key 对应的 value 时会抛出异常,我们应该把上述代码用 try ... catch ... 包起来。当然,System.getType(contentResolver, key, def) 在大多数情况下或许更方便。
总体来说,这个过程并没有什么复杂的地方,但是如果深究一下,为什么明确地写在文档里面的 key 在运行时会有取不到的可能性呢?其实这个问题我之前也考虑过,但没有多想,想当然地认为这样的 API 设计只是“为了看起来更严谨吧”(现在想想,多么幼稚的想法,哈哈)。直到今天我才明白这些设置如果保持初始的默认值一直没有改动过的话他们对应的 key 在系统数据库中就不存在!比如你的手机自从出厂(或上次重装系统)到现在压根没有设置过静态 IP 选项(“Use static IP" 默认是关闭的),那么 WIFI_USE_STATIC_IP 在系统设置数据库中就不存在。也就是说 key 不存在也是设置的一种存在状态,这句话说起来有点拗口,呵呵。
当然,这些 key 不存在还有一种可能性:某些设备没有实现某个功能。比如某款手机没有 Wi-Fi 芯片或压根不支持静态 IP(只是举个例子)也可以在查询 WIFI_USE_STATIC_IP 时抛出 SettingNotFoundException 异常(??)。我对这个不成熟的观点持严重的怀疑态度。
相关文章推荐
- key 不存在也是设置的一种存在状态
- C++编程 - 不存在也是一种存在的0
- 查询的数据插入到另一张表中,分为两种情况,一种是目标表不存在,另一种是目标表存在。
- key存在则更新,不存在则插入
- 检查一个路径下文件是否存在,如果不存在设置一个定时器,在定时器内每隔一定时间检查一次,直到该文件存在返回成功,或者定时超时返回失败
- mysql insert ignore .. ON DUPLICATE KEY 与oracle MERGE INTO 可以相互替换 批量插入存在则替换,不存在则插入
- 关于<resultMap> 设置时存在数据库中不存在的字段名
- 记忆化搜索也是递归剪枝的一种,他记录计算过的状态节点如果遇到就爆栈不再深入,防止了重复计算,同时最优性剪枝也有相同的意味
- MySQL记录存在则更新,不存在插入on duplicate key update
- [SoapUI] 设置最大等待时间,不断重复的去发送一个request,每次从response中获取一个status,直到这个status从一种状态变成另外一种状态
- MYSQL主键存在则更新,不存在则插入的解决方案(ON DUPLICATE KEY UPDATE)
- 设置和获取单选框状态的一种蠢方法
- MySQL 当记录不存在时insert,当记录存在时update(ON DUPLICATE KEY UPDATE, REPLACE)
- ImageView.ScaleType设置图片(变相的也是得到一种剪裁后的图片)
- MYSQL主键存在则更新,不存在则插入的解决方案(ON DUPLICATE KEY UPDATE)
- 解决代码动态设置Edittext编辑状态存在问题
- SQL语句实现不存在即插入,存在则increase某字段的功能insert into … on duplicate key update
- 设置窗体的起始位置,并检查配置文件是否存在,存在使用配置文件,不存在创建配置文件,在每次打开窗体时保持窗体上一次关闭的位置。
- ON DUPLICATE KEY UPDATE 当记录不存在时插入,当记录存在时更新
- mysql的两个技巧(key记录存在则替换,不存在则插入和key记录存在则更新,不存在则插入)