Si j'utilise ce code dans Java alors son bon fonctionnement. Lorsque je convertis ce code en kotlin, j'ai eu une erreur.
08-20 23: 46: 51.003 3782-3782/com.qkangaroo.app W/System.err: Java.lang.IllegalArgumentException: le type de paramètre ne doit pas inclure de variable de type ou de caractère générique: Java.util.Map (paramètre # 1) 08-20 23: 46: 51.003 3782-3782/com.qkangaroo.app W/System.err: pour la méthode ApiInterface.updateCustomerDetail 08-20 23: 46: 51.003 3782-3782/com.qkangaroo.app W/System.err : à retrofit2.ServiceMethod $ Builder.methodError (ServiceMethod.Java:752) 08-20 23: 46: 51.004 3782-3782/com.qkangaroo.app W/System.err: à retrofit2.ServiceMethod $ Builder.methodError (ServiceMethod. Java: 743) 08-20 23: 46: 51.004 3782-3782/com.qkangaroo.app W/System.err: at retrofit2.ServiceMethod $ Builder.parameterError (ServiceMethod.Java:761) 08-20 23: 46: 51.004 3782-3782/com.qkangaroo.app W/System.err: à retrofit2.ServiceMethod $ Builder.build (ServiceMethod.Java:195) 08-20 23: 46: 51.004 3782-3782/com.qkangaroo.app W/System .err: à retrofit2.Retrofit.loadServiceMethod (Retrofit.Java:170) 08-20 23: 46: 51.005 3782-3782/com.qkangaroo.app W/System.err: a t retrofit2.Retrofit $ 1.invoke (Retrofit.Java:147) 08-20 23: 46: 51.005 3782-3782/com.qkangaroo.app W/System.err: at $ Proxy0.updateCustomerDetail (Native Method) 08-20 23 : 46: 51.005 3782-3782/com.qkangaroo.app W/System.err: at com.qkangaroo.app.Fragments.MoreScreen.MoreFragment.updateProfile (MoreFragment.kt: 261) 08-20 23: 46: 51.006 3782- 3782/com.qkangaroo.app W/System.err: à com.qkangaroo.app.Fragments.MoreScreen.MoreFragment $ clickListener $ 1.onClick (MoreFragment.kt: 191) 08-20 23: 46: 51.006 3782-3782/com .qkangaroo.app W/System.err: sur Android.view.View.performClick (View.Java:3517) 08-20 23: 46: 51.006 3782-3782/com.qkangaroo.app W/System.err: sur Android .view.View $ PerformClick.run (View.Java:14155) 08-20 23: 46: 51.006 3782-3782/com.qkangaroo.app W/System.err: sur Android.os.Handler.handleCallback (Handler.Java : 605) 08-20 23: 46: 51.007 3782-3782/com.qkangaroo.app W/System.err: sur Android.os.Handler.dispatchMessage (Handler.Java:92) 08-20 23: 46: 51.007 3782 -3782/com.qkangaroo.app W/System.err: sur Android. os.Looper.loop (Looper.Java:154) 08-20 23: 46: 51.007 3782-3782/com.qkangaroo.app W/System.err: sur Android.app.ActivityThread.main (ActivityThread.Java:4624) 08-20 23: 46: 51.008 3782-3782/com.qkangaroo.app W/System.err: at Java.lang.reflect.Method.invokeNative (Native Method) 08-20 23: 46: 51.009 3782-3782/com .qkangaroo.app W/System.err: à Java.lang.reflect.Method.invoke (Method.Java:511) 08-20 23: 46: 51.009 3782-3782/com.qkangaroo.app W/System.err: sur com.Android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.Java:809) 08-20 23: 46: 51.010 3782-3782/com.qkangaroo.app W/System.err: sur com.Android.internal .os.ZygoteInit.main (ZygoteInit.Java:576) 08-20 23: 46: 51.011 3782-3782/com.qkangaroo.app W/System.err: at dalvik.system.NativeStart.main (Native Method)
var map:HashMap<String,RequestBody> = HashMap<String, RequestBody>()
map.put("version",ApiClient.createRequestBody(AppConstants.API_VERSION))
map.put("auth_token", ApiClient.createRequestBody(customer.authToken!!))
map.put("customer_name",ApiClient.createRequestBody(profileName))
map.put("email", ApiClient.createRequestBody(profileEmail))
val apiInterface = ApiClient.client.create(ApiInterface::class.Java)
val updateCustomerCall: Call<UpdateCustomer> = apiInterface.updateCustomerDetail(map)
updateCustomerCall.enqueue(object : Callback<UpdateCustomer> {
override fun onResponse(call: Call<UpdateCustomer>?, response: Response<UpdateCustomer>?) {
}
override fun onFailure(call: Call<UpdateCustomer>?, t: Throwable?) {
utilities!!.hideProgress(progress)
}
})
val MULTIPART_FORM_DATA = "multipart/form-data"
fun createRequestBody(s: String): RequestBody {
return RequestBody.create(
MediaType.parse(MULTIPART_FORM_DATA), s)
}
@Multipart
@POST("customer")
fun updateCustomerDetail(@PartMap map: Map<String,RequestBody >): Call<UpdateCustomer>
implementation "com.squareup.okhttp3:okhttp:3.8.1"
implementation "com.squareup.okhttp3:logging-interceptor:3.8.1"
implementation ("com.squareup.retrofit2:retrofit:2.3.0"){
exclude module: 'okhttp'
}
implementation "com.squareup.retrofit2:converter-gson:2.3.0"
Ajouter @JvmSuppressWildcards
avant RequestBody
fun updateCustomerDetail(@PartMap map: Map<String, @JvmSuppressWildcards RequestBody >): Call<UpdateCustomer>
Utilisez HashMap ou MutableMap au lieu de Map <K, out V> pour le PartMap
Moyen alternatif qui fonctionne bien pour moi. Mentionné par tpom6oh dans Retrofi Kotlin Issue
Je pense que cela se produit parce que la déclaration de Map est une interface publique Map <K, out V> et le mot de sortie rend le type de valeur générique. Vous pouvez essayer d'utiliser MutableMap ou HashMap à la place.
@Multipart
@POST("customer")
fun updateCustomerDetail(@PartMap map: HashMap<String, RequestBody>): Call<UpdateCustomer>