Публикация данных в теле с помощью Retrofit2 и Kotlin: невозможно создать адаптер вызовов - PullRequest
0 голосов
/ 15 ноября 2018

у нас проблема с отправкой почтового запроса с параметрами тела. JSON выглядит так:

{
"userId": 123456,
"comment": "This is a comment"
}

Мы вызываем бэкэнд со следующим интерфейсом:

interface ServiceDetailsService {

   @POST(API_CLOSE_EVENT)
   fun closeEvent(@Body data: servicePostData): Call<servicePostData>
}

Мы вызываем функцию с:

fun serviceTaskDone(data: servicePostData) {
       val call: Call<servicePostData> = service.closeEvent(data)
       call.enqueue(object : Callback<servicePostData> {
           override fun onResponse(call: Call<servicePostData>, response: Response<servicePostData>) {
               Log.d("Output", response.toString())
           }

           override fun onFailure(call: Call<servicePostData>, t: Throwable) {
               Log.d("Output", t.toString())
           }

       })
   }

И когда мы сейчас выполним наш код, появятся следующие ошибки:

11-15 18:40:23.732 23168-23168/de.conlance.shannonapp E/AndroidRuntime: FATAL EXCEPTION: main
   Process: de.conlance.shannonapp, PID: 23168
   java.lang.IllegalArgumentException: Unable to create call adapter for retrofit2.Call<de.conlance.shannonapp.data.model.serviceDetails.Task>
       for method ServiceDetailsService.closeEvent
       at retrofit2.ServiceMethod$Builder.methodError(ServiceMethod.java:755)
       at retrofit2.ServiceMethod$Builder.createCallAdapter(ServiceMethod.java:240)
       at retrofit2.ServiceMethod$Builder.build(ServiceMethod.java:165)
       at retrofit2.Retrofit.loadServiceMethod(Retrofit.java:170)
       at retrofit2.Retrofit$1.invoke(Retrofit.java:147)
       at java.lang.reflect.Proxy.invoke(Proxy.java:913)
       at $Proxy3.closeEvent(Unknown Source)
       at de.conlance.shannonapp.presentation.serviceDetails.ServiceDetailsViewModel.serviceTaskDone(ServiceDetailsViewModel.kt:37)
       at de.conlance.shannonapp.presentation.serviceDetails.ServiceDetailsFragment$showAcceptErrorDescDialog$1.onClick(ServiceDetailsFragment.kt:171)
       at android.view.View.performClick(View.java:6274)
       at android.view.View$PerformClick.run(View.java:24859)
       at android.os.Handler.handleCallback(Handler.java:789)
       at android.os.Handler.dispatchMessage(Handler.java:98)
       at android.os.Looper.loop(Looper.java:164)
       at android.app.ActivityThread.main(ActivityThread.java:6710)
       at java.lang.reflect.Method.invoke(Native Method)
       at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:770)
    Caused by: kotlin.TypeCastException: null cannot be cast to non-null type retrofit2.CallAdapter<kotlin.Any, kotlin.Any>
       at de.conlance.shannonapp.rx.RetrofitRxErrorHandlingCallAdapterFactory.get(RetrofitRxErrorHandlingCallAdapterFactory.kt:41)
       at retrofit2.Retrofit.nextCallAdapter(Retrofit.java:221)
       at retrofit2.Retrofit.callAdapter(Retrofit.java:205)
       at retrofit2.ServiceMethod$Builder.createCallAdapter(ServiceMethod.java:238)
       at retrofit2.ServiceMethod$Builder.build(ServiceMethod.java:165)
       at retrofit2.Retrofit.loadServiceMethod(Retrofit.java:170)
       at retrofit2.Retrofit$1.invoke(Retrofit.java:147)
       at java.lang.reflect.Proxy.invoke(Proxy.java:913)
       at $Proxy3.closeEvent(Unknown Source)
       at de.conlance.shannonapp.presentation.serviceDetails.ServiceDetailsViewModel.serviceTaskDone(ServiceDetailsViewModel.kt:37)
       at de.conlance.shannonapp.presentation.serviceDetails.ServiceDetailsFragment$showAcceptErrorDescDialog$1.onClick(ServiceDetailsFragment.kt:171)
       at android.view.View.performClick(View.java:6274)
       at android.view.View$PerformClick.run(View.java:24859)
       at android.os.Handler.handleCallback(Handler.java:789)
       at android.os.Handler.dispatchMessage(Handler.java:98)
       at android.os.Looper.loop(Looper.java:164)
       at android.app.ActivityThread.main(ActivityThread.java:6710)
       at java.lang.reflect.Method.invoke(Native Method)
       at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:770)

Мы проверили параметр Void в вызове, и мы также получаем то же сообщение об ошибке, что и ниже.

За любые предложения мы очень благодарны.

С наилучшими пожеланиями

Ответы [ 2 ]

0 голосов
/ 20 ноября 2018

@ martin-zeitler мы исправили проблему.

  1. Мы добавили следующий header

@ Headers ("Content-Type:application / json; charset = urf-8 ")

Мы добавили compositDisposable как

compositDisposable.add (service.closeEvent (jsonObject.toString ())

.compose(RxSingleCallback.getSchedulersForSingle())
.doOnSubscribe{ loadingStatusMutable.value = true }
.doAfterTerminate { loadingStatusMutable.value = false }
.subscribeWith(object : DisposableSingleObserver<ServicePostResponse>() {
    override fun onSuccess(response: ServicePostResponse) {
        Log.d("Response", response.toString())
    }

    override fun onError(t: Throwable) {
        Log.d("Response", t.toString())
        //snackBarMutable.value = throwable.localizedMessage
    }

})

)

0 голосов
/ 15 ноября 2018

есть что-то, помеченное @NonNull, в то время как NULL передается в:

Причина: kotlin.TypeCastException: Ноль не может быть приведена к ненулевому типу retrofit2.CallAdapter at de.conlance.shannonapp.rx.RetrofitRxErrorHandlingCallAdapterFactory. get (RetrofitRxErrorHandlingCallAdapterFactory.kt: 41)

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