我应该在try catch中包装getSharedPreferences吗?

时间:2017-12-24 15:50:14

标签: android android-sharedpreferences

我使用此功能从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;
}

3 个答案:

答案 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"的默认值