我的代码:
var users: MutableList<String> = mutableListOf()
lateinit var players: ArrayList<Player>
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val sharedPrefPlayers = activity?.getPreferences(Context.MODE_PRIVATE)
sharedPrefPlayers?.all?.keys?.forEach {
val filename = "player_$it"
val playerSharedPref = activity?.getSharedPreferences(filename, Context.MODE_PRIVATE)
players.add(Player(playerSharedPref!!.getString("name", ""), playerSharedPref.getInt("age", 0), playerSharedPref.getString("gender", "male")))
}
players = arrayListOf()
}
我在上面的Type Mismatch - Required: String, Found: String?
通话中收到getString()
。我不确定String
是否可以为空,因为如果找不到“名称”,则默认为""
的String背景。
此外,getInt()
调用没有该错误。
有什么主意吗?
答案 0 :(得分:2)
根据Android Documentation,这是因为SharedPreferences.getString(key, defValue)
可为空。
换句话说,getString(String, String)
的{{1}}如下。
SharedPreferences
因此,即使您传递了非null字符串,Kotlin仍然认为@Nullable
String getString(String key, @Nullable String defValue);
可能为null。
您可以通过确保playerSharedPref!!.getString("name", "")
为非空值来解决此问题。
解决方案:
将playerSharedPref!!.getString("name", "")
放在!!
的末尾,因此结果将是playerSharedPref!!.getString("name", "")
希望这会有所帮助!