使用Kotlin将字符串发布到服务器API(OkHttp / Retrofit)

我正在尝试使用OkHttp或Retrofit将字符串发布到Kotlin中的API。

如果我使用OkHttp ,不管我POST什么,我总是会得到一个空的数组。

private fun sendRegistrationToServer(refreshedToken: String) { Log.e(_tag, "Refreshed token: " + refreshedToken) val okClient = OkHttpClient() val requestBody = FormBody.Builder() .add("id", "0") .add("token", refreshedToken) .build() val request = Request.Builder() .url("http://192.168.1.27/testApi/updates") .post(requestBody) .build() try { val response = okClient.newCall(request).execute() Log.e("B_RES", response.body()?.string()) } catch (e: IOException) { Log.e("RES_FAIL", e.toString()) } } 

Logcat说:

 01-09 17:58:24.054 20439-20670/testApi.testApi_android E/B_RES: Array ( ) 

如果我使用REST客户端测试API,一切正常,我找回我发布的东西。 (现在,API只是发回$_POST

如果我尝试使用以下代码进行改造

 private fun sendRegistrationToServer(refreshedToken: String) { Log.e(_tag, "Refreshed token: " + refreshedToken) val apiBaseUrl = "http://192.168.1.27/testApichat/" val okClient = OkHttpClient().newBuilder().build() val retrofit = Retrofit.Builder() .baseUrl(apiBaseUrl) .client(okClient) .addConverterFactory(GsonConverterFactory.create()) .build() val backendService = retrofit.create(BackendService::class.java) val call = backendService.updateToken("0", refreshedtoken) val result = call.execute().body() Log.e("RES", result.toString()) } interface BackendService { @POST("updates") fun updateToken( @Field("id") id: String, @Field("token") token: String ): Call } 

我只是得到一个错误:

 01-09 18:01:41.415 21218-21535/testApi.testApi_android E/AndroidRuntime: FATAL EXCEPTION: pool-3-thread-1 Process: testApi.testApi_android, PID: 21218 java.lang.IllegalArgumentException: Unable to create call adapter for interface okhttp3.Call for method BackendService.updateToken at retrofit2.ServiceMethod$Builder.methodError(ServiceMethod.java:752) at retrofit2.ServiceMethod$Builder.createCallAdapter(ServiceMethod.java:237) at retrofit2.ServiceMethod$Builder.build(ServiceMethod.java:162) 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 $Proxy1.updateToken(Unknown Source) at testApi.testApi_android.InstanceIdService.sendRegistrationToServer(InstanceIdService.kt:50) at testApi.testApi_android.InstanceIdService.onTokenRefresh(InstanceIdService.kt:34) at com.google.firebase.iid.FirebaseInstanceIdService.handleIntent(Unknown Source:12) at com.google.firebase.iid.zzg.run(Unknown Source:26) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636) at java.lang.Thread.run(Thread.java:764) Caused by: java.lang.IllegalArgumentException: Could not locate call adapter for interface okhttp3.Call. Tried: * retrofit2.ExecutorCallAdapterFactory at retrofit2.Retrofit.nextCallAdapter(Retrofit.java:241) at retrofit2.Retrofit.callAdapter(Retrofit.java:205) at retrofit2.ServiceMethod$Builder.createCallAdapter(ServiceMethod.java:235) ... 12 more 

经过数小时的Google搜索和多次尝试,我无法find解决此问题的方法。