Android 我应该将GetSharedReferences封装在try-catch中吗?

Android 我应该将GetSharedReferences封装在try-catch中吗?,android,android-sharedpreferences,Android,Android Sharedpreferences,我使用此函数从Android应用程序中提取共享首选项。但是,我不确定请求的字段是否存在。我是否应该将代码包装在try catch中,或者当字段不存在时,getString()是安全的 public String loadPreferences(String what){ SharedPreferences settings =this.getSharedPreferences("settings", Context.MODE_PRIVATE); String content =

我使用此函数从Android应用程序中提取共享首选项。但是,我不确定请求的字段是否存在。我是否应该将代码包装在try catch中,或者当字段不存在时,
getString()
是安全的

public String loadPreferences(String what){
    SharedPreferences settings  =this.getSharedPreferences("settings", Context.MODE_PRIVATE);
    String content =settings.getString(what, "empty");
    return content;
}
如果“field”是指由
what
键入的值,
getString()
将不会在代码段中返回
null
。它将返回由
what
所键入的值,或者如果该首选项没有值,则返回
“empty”

如果是“field”,则表示由what所键入的值,
getString()
将不会在代码段中返回
null
。它将返回由
what
输入的值,或者
如果该首选项没有值,则返回“空”

您应该,它清楚地说

返回首选项值(如果存在),或返回defValue。投掷 ClassCastException,如果此名称的首选项不是 一串。此值可能为空

在您的情况下,defValue“空的”

所以,只有当您试图返回的值不是指定类型时,异常才可能发生,它不应该是
getString()
的情况,尽管它清楚地指出,您应该这样做

返回首选项值(如果存在),或返回defValue。投掷 ClassCastException,如果此名称的首选项不是 一串。此值可能为空

在您的情况下,defValue“空的”


因此,只有当您尝试返回的值不是指定类型时,才可能出现异常。如果您通过以下链接进行搜索,则绝不会出现
getString()
的情况:

您将发现此方法:

getString(String key, String defValue)
这意味着,如果您没有使用此键在SharedReferences中存储任何内容,并且尝试获取此键的值,则它将返回默认值

那么你的情况呢

String content =settings.getString(what, "empty");

对于
什么
键,如果您没有使用此键存储任何内容,并且尝试获取其值,则如果您通过此链接搜索,它将返回默认值,即
“空”

您将发现此方法:

getString(String key, String defValue)
这意味着,如果您没有使用此键在SharedReferences中存储任何内容,并且尝试获取此键的值,则它将返回默认值

那么你的情况呢

String content =settings.getString(what, "empty");

对于
什么
键,如果您没有使用此键存储任何内容,并且尝试获取其值,则它将返回默认值,即
“空”
,在您的情况下

是“无值”等于“不存在”?@AliSheikhpour:Yes。“无值”等于“不存在”@AliSheikhpour:Yes。