为什么在使用sharedPreferences时应该对字符串进行硬编码?

时间:2018-08-27 19:37:40

标签: java android optimization

我听说使用editor.putString("Message","Hello");是不正确的做法,您应该改为editor.putString(getString(R.string.messagestring),"Hello");。但为什么?它更长,具有相同的结果,并且看起来更凌乱。是不是因为打错字更难?

这是Signal的一个示例: Source

  if (params[0] < SCREENSHOTS) {
    boolean screenSecurity = PreferenceManager.getDefaultSharedPreferences(context).getBoolean(TextSecurePreferences.SCREEN_SECURITY_PREF, true);
    TextSecurePreferences.setScreenSecurityEnabled(getApplicationContext(), screenSecurity);
  }

3 个答案:

答案 0 :(得分:2)

用于人类可读文本的代码中的

String值是错误的。

这样做会使本地化成为不可能。

另一方面,R.string.中的值会自动使用正确的语言(假设您使用valuesvalues-esvalues-fr,...并放置翻译)< / p>

注意:您可能不应该翻译key的{​​{1}}而是值(SharedPreference)的一部分,因为这大概是人类可读的东西。

"Hello"

如果用户更改设备语言,则密钥可能会更改,这意味着将不再在新密钥下找到旧的存储值。如果您希望将键放在中央位置,则最好在代码中将它们定义为editor.putString("message", getString(R.string.messagestring)); 常量。

static final

我实际上会考虑使用来自editor.putString(MyPrefConstants.PREF_MESSAGE, getString(R.string.messagestring)); 的密钥是一个非常可疑的设计决策。这适用于打算由机器消耗的任何内容,而不是对用户可见的文本。有一些例外,但很少见。

答案 1 :(得分:0)

这一切与维护,可重复使用性,清洁度有关,如果需要,还可以简化本地化。
"Message"为例。
如果它是“首选项”的键,那么您将在代码中使用此字符串多少次?大于1,对吗?想象一下,您一遍又一遍地写了“消息”。难道至少一次拼错了吗?好吧,您不能拼错字符串资源,因为编译器不会允许您。
另一件事:您知道所有UI字符串在哪里,因此当您需要更改其中的1个字符串时,您便知道该在哪里寻找,一旦更改,整个应用程序中的字符串都会更改。
最后,如果您希望自己使用多种语言,这是AS提供的Editor的唯一方法。

编辑:关于Preferences之类的字符串是否应该放在Resources中的问题,我的回答是。程序员应为字符串资源提供正确的ID,以区分UI项与应用内项。

答案 2 :(得分:0)

这不是不必要,而是良好实践

例如

editor.putString("Message","Hello"); 在这里键->“消息” 有时您可能会因输入错误消息或错误消息而将“消息”写入“按摩”或其他内容。

为避免这类情况,我们应该这样写 editor.putString(getString(R.string.messagestring),"Hello");