我使用此功能从Android App中提取共享首选项。但是,我不确定所请求的字段是否存在。我应该将代码包装在try catch中吗?当字段不存在时,getString()
是否安全?
public String loadPreferences(String what){
SharedPreferences settings =this.getSharedPreferences("settings", Context.MODE_PRIVATE);
String content =settings.getString(what, "empty");
return content;
}
答案 0 :(得分:2)
如果按“字段”表示由任何what
键入的值,getString()
将不会在您的代码段中返回null
。它将返回由what
为{}的键值,如果该首选项没有值,则返回"empty"
。
答案 1 :(得分:1)
你应该read documentation of getString here,它清楚地说,
返回首选项值(如果存在)或defValue。抛出 如果存在不具有此名称的首选项,则为ClassCastException 一个字符串。该值可能为null。
在您的情况下, defValue “为空”
因此,只有当您尝试返回的值不是指定类型时才可能出现异常,但不应该是getString()
的情况,但
答案 2 :(得分:1)
如果您搜索此链接:https://developer.android.com/reference/android/content/SharedPreferences.html
你会发现这个方法:
getString(String key, String defValue)
这意味着如果您使用此密钥存储在SharedPreferences中的任何内容,并且您尝试获取此密钥的值而不是它将返回默认值
所以在你的情况下
String content =settings.getString(what, "empty");
对于what
密钥,如果您使用此密钥存储了任何内容,并且如果您尝试获取其值,则会返回您案例中"empty"
的默认值