我有以下代码作为我的改装代码:
SwapItApi.kt
interface SwapItApi {
@Headers("Content-Type: application/json")
@POST("customer/add")
fun addCustomer(@Body customerData: Customer): Call<Customer>
}
object ServiceBuilder {
private val client = OkHttpClient.Builder().build()
private val retrofit = Retrofit.Builder()
.baseUrl("http://192.168.4.29:8102/api/")
.addConverterFactory(GsonConverterFactory.create())
.client(client)
.build()
fun<T> buildService(service: Class<T>): T = retrofit.create(service)
}
SwapItApiService.kt
class SwapItApiService {
fun addUser(customerData: Customer, onResult: (Customer?) -> Unit) {
val retrofit = ServiceBuilder.buildService(SwapItApi::class.java)
retrofit.addCustomer(customerData).enqueue(
object: Callback<Customer> {
override fun onFailure(call: Call<Customer>, t: Throwable) {
onResult(null)
}
override fun onResponse(call: Call<Customer>, response: Response<Customer>) {
val customer = response.body()
onResult(response.body())
}
}
)
}
}
RegistrationContent.kt
...
private fun addCustomer(customerData: Customer, scope: CoroutineScope, snackbarHostState: SnackbarHostState) {
val apiService = SwapItApiService()
var convertedDOB = ""
convertedDOB += customerData.dob!!.substring(4, 8)
convertedDOB += "-"
convertedDOB += customerData.dob!!.substring(2, 4)
convertedDOB += "-"
convertedDOB += customerData.dob!!.substring(0, 2)
val customer = Customer(
id = null,
username = customerData.username,
password = customerData.password,
dob = convertedDOB,
firstName = customerData.firstName,
lastName = customerData.lastName,
isActive = null,
)
apiService.addUser(customer) {
if(it?.id != null) {
scope.launch {
snackbarHostState.showSnackbar("ID: ${it.id}, Username: ${it.username}")
}
}
else {
scope.launch {
snackbarHostState.showSnackbar("Error registering new customer.")
}
}
}
}
...
所以当我调用RegistrationContent.addCustomer(...)
时,它调用了SwapItApiService.addCustomer(...)
,它成功返回,当查看我的数据库表时,我发送的条目已经创建,但是,RegistrationContent.addCustomer(...)
的snackbar显示“注册新客户时出错”。
在断点之后,我发现it?.id
为null。所以我的代码似乎没有等待。
我是新来的,所以我不确定该怎么做才能让它正常工作。
1条答案
按热度按时间plicqrtu1#
所以经过相当多的修修补补(我的意思是很多),事实证明我是
旁注:Gson主要针对Java程序。在大多数情况下,它可能适用于Kotlin,但在某些情况下,它并不很好地工作,例如。零安全性,请参见这个问题。也许可以考虑使用具有显式Kotlin支持的JSON库。- Marcono1234
他说,我必须改变Jackson。然后我意识到,在我的
Customer
类中,我没有在相关条目上使用@JsonProperty
。哦,我还需要添加一个@JsonIgnoreProperties(ignoreUnknown = true)
与我的响应从服务器和一些但在Customer
添加后,它现在工作正常。