繁体   English   中英

无法在 Retrofit Android (Kotlin) 中发出 Post 请求

[英]Cannot make Post request in Retrofit Android (Kotlin)

我一直在使用 Jetpack Compose 开发 Android 问答应用程序。 我一直在尝试在 Retrofit 中发出 Post 请求,但我发送的数据不在我的 API 网站上。 不过,我已经成功发出了 Get 请求。 我已经阅读了很多文档,但我无法找出这段代码有什么问题。
这是数据类。

data class UsersEntity(
    val id: Int? = null,
    val name: String? = null,
    val uid: String? = null
)

这是服务接口。

interface UserService {
    @POST("createusers")
    fun createUsers(@Body usersinfo: UsersEntity): Call<Unit>
}

当我点击一个按钮时,我想向服务器发送数据。 我收到日志“您好,干得好”,但我无法在我的 API 上看到数据。

Button(
                onClick = {
                    val moshi = Moshi.Builder()
                        .add(KotlinJsonAdapterFactory())
                        .build()

                    val retrofit = Retrofit.Builder()
                        .baseUrl("https://api.*****.com/")
                        .addConverterFactory(MoshiConverterFactory.create(moshi))
                        .build()

                    val service: UserService = retrofit.create(UserService::class.java)

                    val usersInfo = UsersEntity(
                        3, "Alex", "164E92FC-D37A")

                    service.createUsers(usersInfo).enqueue(object: Callback<Unit> {
                        override fun onResponse(call: Call<Unit>, response: Response<Unit>) {
                            Log.d("Hi", "good job")
                        }

                        override fun onFailure(call: Call<Unit>, t: Throwable) {
                            Log.d("Hi", "error")
                        }
                    })
                }

我像这样更改了代码。

Button(
                onClick = {
                    val moshi = Moshi.Builder()
                        .add(KotlinJsonAdapterFactory())
                        .build()

                    val retrofit = Retrofit.Builder()
                        .baseUrl("https://api.*****.com/")
                        .addConverterFactory(MoshiConverterFactory.create(moshi))
                        .build()

                    thread {
                        try {
                            val service: UserService = retrofit.create(UserService::class.java)

                            val usersInfo = UsersEntity(
                                3, "Alex", "164E92FC-D37A")

                            service.createUsers(usersInfo).enqueue(object: Callback<ResponseBody> {
                                override fun onResponse(call: Call<ResponseBody>, response: Response<ResponseBody>) {
                                    Log.d("Response", "${response.body()}")
                                }

                                override fun onFailure(call: Call<ResponseBody>, t: Throwable) {
                                    Log.d("Hi", "error")
                                }
                            })
                        } catch (e: Exception) {
                    Log.d("response", "debug $e")
                        }
                    }
               },

有人可以帮我吗? 谢谢你。

我认为你的 baseurl 不应该以斜杠结尾。 试试这个。

.baseUrl("https://api.*****.com")

对于您的界面(也是Call<ResponseBody> ):

interface UserService {
    @POST("/createusers/")
    fun createUsers(@Body usersinfo: UsersEntity): Call<ResponseBody>
}

过去遇到过一些问题,所以这可能会有所帮助。 如果不是,它至少会稍微清理一下代码:p

您也可以使用 ProxyMan 来拦截您的请求并读取您的应用程序实际发送到服务器的内容,这可能是一个问题!

代理人.io

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM