【问题标题】:savedInstanceState.getString() only available for API 21 warning?savedInstanceState.getString() 仅适用于 API 21 警告?
【发布时间】:2015-02-01 23:06:46
【问题描述】:

所以我重写 onRestoreInstanceState() 以在屏幕翻转时恢复数据,并在内部调用 getString() 来设置EditText 的实例:

@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
    super.onRestoreInstanceState(savedInstanceState);

    mEditText.setText(savedInstanceState.getString(TYPED_TEXT, String.valueOf(R.string.message_empty)));       

}

然后,Android Studio 1.0.2 在 getString() 下划线,然后给我一个警告:“调用需要 API 级别 21

问题是,虽然我收到了警告,但当我在 Android 设备(版本 4.0.3 - API 15)上运行该应用程序时它工作得很好

我的最小 SDK 设置为 Froyo

我的目标 SDK 到 Lollipop

有人知道我为什么会收到这个警告吗?

【问题讨论】:

  • 也许我错了,但EditText 记得跨方向的文本,不是吗?
  • 好吧,我刚开始使用 Android,所以我不知道。感谢您的提示:)

标签: android android-studio getstring


【解决方案1】:

来自BaseBundle docs

public String getString (String key, String defaultValue) 在 API 级别 12 中添加

除此之外,代码看起来还不错,并且正如您所说的在 API 15 上可以正常工作。也许您将“12”误读为“21”?

您的代码仍然无法在 API 12 下运行。由于仅在保存的实例状态不为空时调用恢复方法,因此您可以改用以下内容:

mEditText.setText(savedInstanceState.getString(TYPED_TEXT));

message_empty 文本只有在EditText 的内容没有被保存的情况下才会被设置……你显然是这样编程的,对吧?另外,我假设它是一个空字符串。

【讨论】:

  • 您好 Eugen,感谢您的回答!我已将 min SDK 更改为 12,警告不再出现。是的,它显示 API 21,而不是 12——我猜这是一个错误。
  • 不不不!如果您按照我的建议重写调用,警告也会消失,而且运行旧版本 Android 的设备仍然可以运行您的应用程序。如果您每次遇到此类错误时都提出 minSDK,那么您很快就会 21 岁 :D 为了兼容性,请尝试解决它。​​
  • 哎呀,你说得对,尤金!我已将 min SDK 设置回 8,并按照您所说的更改了代码,并且警告消失了。非常感谢 Eugen =)
猜你喜欢
  • 1970-01-01
  • 2018-12-09
  • 2016-06-11
  • 1970-01-01
  • 2014-09-08
  • 2019-10-01
  • 2015-01-22
  • 2018-11-08
  • 2019-07-27
相关资源
最近更新 更多