Intereting Posts
Kotlin – Кинжал 2 – это не инъекционные объекты Kotlin: Как я могу назвать функцию расширения супер? Как узнать тип вывода в Котлине? Тест Running Spek показывает ошибку "Empty test suite" Ошибка: супертипы следующих классов не могут быть разрешены. Убедитесь, что у вас есть необходимые зависимости в пути к классам Android Room, добавление классов библиотеки данных в базу данных Ошибка библиотеки библиотеки Android: не удается найти установщик для поля. (Котлин) Как использовать CacheManager для Osmdroid и Osmdroid OpenGL Texture Glitch с лицами Использовать группу в ConstraintLayout для прослушивания событий кликов на нескольких представлениях Почему я получаю: null не может быть применен к непустому типу android.widget.SearchView? Класс данных Kotlin Jackson @ JsonProperty не отмечен Как создать объект JavaScript для объекта Kotlin? Строчная интерполяция для двойного числа в Котлине когда выражение kotlin как проверить, когда a & b

Аргумент типа не распознан в Котлине

Используя gson и retrofit и создайте JsonDeserializer.

В java класс определяется как:

public class Test implements JsonDeserializer<NavigationMenu[]> {... 

В Котлине он определяется как:

 class NavigationMenuArrayDeserializer : JsonDeserializer<Array<NavigationMenu>> {... 

Класс Java называется ожидаемым после регистрации в GSON. Класс Котлин никогда не называется.

 Retrofit jsonClient = new Retrofit .Builder() .baseUrl(baseUrl) .client(okHttpClient) .addConverterFactory(getGsonConverter()) .build(); 

 private GsonConverterFactory getGsonConverter() { GsonBuilder gsonBuilder = new GsonBuilder(); gsonBuilder.setLenient(); gsonBuilder.registerTypeAdapter(NavigationMenu[].class, new NavigationMenuArrayDeserializer()); Gson gson = gsonBuilder.create(); return GsonConverterFactory.create(gson); } 

Любая идея почему?

Solutions Collecting From Web of "Аргумент типа не распознан в Котлине"

К сожалению, никаких предложений для меня не работало. Я преобразовал вызывающий класс из java в kotlin, поскольку вызовы типов классов java в kotlin легко сработали для меня в прошлом … и это сделало трюк.

Моя первоначальная попытка вызвать класс класса kotlin из класса java по-прежнему не увенчалась успехом, но я смог настроить конфигурацию, поэтому я называю это полным.

Преобразование кода конфигурации Java в OP в Kotlin сделало трюк:

 private val gsonConverter: GsonConverterFactory get() { val gsonBuilder = GsonBuilder() gsonBuilder.setLenient() gsonBuilder.registerTypeAdapter(Array<NavigationMenu>::class.java, NavigationMenuArrayDeserializer()) val gson = gsonBuilder.create() return GsonConverterFactory.create(gson) } 

Вы можете попробовать использовать TypeToken следующим образом.

 private GsonConverterFactory getGsonConverter() { val type = object : TypeToken< ArrayList < NavigationMenu >>(){}.getType() GsonBuilder gsonBuilder = new GsonBuilder(); gsonBuilder.setLenient(); gsonBuilder.registerTypeAdapter(type, new NavigationMenuArrayDeserializer()); Gson gson = gsonBuilder.create(); return GsonConverterFactory.create(gson); } 

Я решил аналогичную проблему, используя класс массива. Попробуйте что-то вроде этого:

 val clazz = (Array<NavigationMenu>::class).java gson.fromJson(json, clazz) 

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