В этом случае вы должны взглянуть на реализацию JSONObject
.
Документация для параметра JSONObject(Map)
состояний конструктора
* @param copyFrom a map whose keys are of type {@link String} and whose
* values are of supported types.
Но чтобы найти, что составляет действительное значение, вы должны посмотреть на wrap(entry.getValue())
, который вызывается в конструкторе. Документация для wrap
гласит:
/**
* Wraps the given object if necessary.
*
* <p>If the object is null or , returns {@link #NULL}.
* If the object is a {@code JSONArray} or {@code JSONObject}, no wrapping is necessary.
* If the object is {@code NULL}, no wrapping is necessary.
* If the object is an array or {@code Collection}, returns an equivalent {@code JSONArray}.
* If the object is a {@code Map}, returns an equivalent {@code JSONObject}.
* If the object is a primitive wrapper type or {@code String}, returns the object.
* Otherwise if the object is from a {@code java} package, returns the result of {@code toString}.
* If wrapping fails, returns null.
*/
В вашем случае, я предполагаю, что значение вашей карты не соответствует ни одному из критериев для возврата ненулевого значения, что я ожидаю для non java.*
non JSON*
object.
С учетом вышесказанного я бы посоветовал не хранить сложные объекты и структуры в SharedPreferences
(это не оптимально) и предложил бы использовать базу данных. Однако, если вы настроены на этом маршруте, обязательно посмотрите библиотеку Kotlin Serialization .