Компилятор Kotlin говорит, что getString () обнуляется, даже если у него есть значение по умолчанию - PullRequest
1 голос
/ 20 апреля 2019

Мой код:

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() не имеет этой ошибки.

Есть идеи?

1 Ответ

2 голосов
/ 20 апреля 2019

Согласно Документации Android , это потому, что SharedPreferences.getString(key, defValue) может иметь значение null.

другими словами, getString(String, String) из SharedPreferences выглядит следующим образом.

@Nullable
String getString(String key, @Nullable String defValue);

Таким образом, даже если вы передали ненулевую строку, Котлин по-прежнему считает, что playerSharedPref!!.getString("name", "") может быть нулевым.

Вы можете решить эту проблему, убедившись, что playerSharedPref!!.getString("name", "") не равен нулю.

Решение: положить !! в конце playerSharedPref!!.getString("name", ""), поэтому результат будет playerSharedPref!!.getString("name", "")!!

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...