Multipart request with Retrofit @PartMap Error in Kotlin (Android) -
if using code in java working fine. when convert code in kotlin got error.
logcat
08-20 23:46:51.003 3782-3782/com.qkangaroo.app w/system.err: java.lang.illegalargumentexception: parameter type must not include type variable or wildcard: java.util.map (parameter #1) 08-20 23:46:51.003 3782-3782/com.qkangaroo.app w/system.err: method 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: @ 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: @ retrofit2.retrofit$1.invoke(retrofit.java:147) 08-20 23:46:51.005 3782-3782/com.qkangaroo.app w/system.err: @ $proxy0.updatecustomerdetail(native method) 08-20 23:46:51.005 3782-3782/com.qkangaroo.app w/system.err: @ 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: @ android.view.view.performclick(view.java:3517) 08-20 23:46:51.006 3782-3782/com.qkangaroo.app w/system.err: @ android.view.view$performclick.run(view.java:14155) 08-20 23:46:51.006 3782-3782/com.qkangaroo.app w/system.err: @ android.os.handler.handlecallback(handler.java:605) 08-20 23:46:51.007 3782-3782/com.qkangaroo.app w/system.err: @ android.os.handler.dispatchmessage(handler.java:92) 08-20 23:46:51.007 3782-3782/com.qkangaroo.app w/system.err: @ android.os.looper.loop(looper.java:154) 08-20 23:46:51.007 3782-3782/com.qkangaroo.app w/system.err: @ android.app.activitythread.main(activitythread.java:4624) 08-20 23:46:51.008 3782-3782/com.qkangaroo.app w/system.err: @ 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: @ com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:809) 08-20 23:46:51.010 3782-3782/com.qkangaroo.app w/system.err: @ com.android.internal.os.zygoteinit.main(zygoteinit.java:576) 08-20 23:46:51.011 3782-3782/com.qkangaroo.app w/system.err: @ dalvik.system.nativestart.main(native method)
fragment.kt
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) } })
apiclient.kt
val multipart_form_data = "multipart/form-data" fun createrequestbody(s: string): requestbody { return requestbody.create( mediatype.parse(multipart_form_data), s) }
apiinterface,.kt
@multipart @post("customer") fun updatecustomerdetail(@partmap map: map<string,requestbody >): call<updatecustomer>
gradle file
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"
add @jvmsuppresswildcards
before requestbody
fun updatecustomerdetail(@partmap map: map<string, @jvmsuppresswildcards requestbody >): call<updatecustomer>
Comments
Post a Comment