我在进行 post 请求改造时得到空值
I'm getting null values when making post request retrofit
我对在 Kotlin 中使用 API 还很陌生,我正在使用 Retrofit 库并且我 运行进入这个问题
发出 post 请求后获取空值。
我正在尝试获得此响应:
{
"status": "success",
"message": "Transfer Queued Successfully",
"data": {
"account_number": "0690000040",
"bank_code": "044",
"currency": "NGN",
"amount": 5500
}
}
我的模型class
data class Transfer (
@SerializedName("account_bank") val accountBank: String?,
@SerializedName("account_number") val accountNumber: String?,
@SerializedName("amount") val amount: Int?,
@SerializedName("currency") val currency: String?
)
我的API界面
interface TransferApi {
@Headers("Content-Type: application/json")
@POST("transfers")
fun createTransfer(@Body transfer: Transfer) : Call<Transfer>
}
XML 文件
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:id="@+id/responseText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
Activity Class
class MainActivity : AppCompatActivity() {
private lateinit var transferApi: TransferApi
private val bankInput = "044"
private val numberInput = "0690000040"
private val amountInput = 500
private val currency = "NGN"
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val secret = "SECRET_KEY"
val retrofit = Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.client(OkHttpClient.Builder().addInterceptor { chain ->
val request = chain.request().newBuilder().addHeader("Authorization", "Bearer $secret").build()
chain.proceed(request)
}.build())
.build()
transferApi = retrofit.create(TransferApi::class.java)
createTransfer()
}
private fun createTransfer(){
val transferCode = Transfer(bankInput,numberInput,amountInput,currency)
val call = transferApi.createTransfer(transferCode)
call.enqueue(object : Callback<Transfer> {
@SuppressLint("SetTextI18n")
override fun onResponse(call: Call<Transfer>, response: Response<Transfer>) {
if (!response.isSuccessful) {
responseText.text ="Code${response.code()}"
return
}
responseText.text = response.body().toString()
}
override fun onFailure(call: Call<Transfer>, t: Throwable) {
responseText.text = (t.message)
}
})
}
}
我收到回复
{
accountBank = null,
accoutNumber = null,
amount = null,
currency = null
}
我想提议回复above.Your帮助将不胜感激!!!
您的 Transfer
class 似乎并不代表实际回复。你需要一个包装器,像这样:
data class TransferResponse(
val status: String,
val message: String,
val data: Transfer
)
然后您需要将 API 接口更改为 return 这个包装器。
我对在 Kotlin 中使用 API 还很陌生,我正在使用 Retrofit 库并且我 运行进入这个问题 发出 post 请求后获取空值。
我正在尝试获得此响应:
{
"status": "success",
"message": "Transfer Queued Successfully",
"data": {
"account_number": "0690000040",
"bank_code": "044",
"currency": "NGN",
"amount": 5500
}
}
我的模型class
data class Transfer (
@SerializedName("account_bank") val accountBank: String?,
@SerializedName("account_number") val accountNumber: String?,
@SerializedName("amount") val amount: Int?,
@SerializedName("currency") val currency: String?
)
我的API界面
interface TransferApi {
@Headers("Content-Type: application/json")
@POST("transfers")
fun createTransfer(@Body transfer: Transfer) : Call<Transfer>
}
XML 文件
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:id="@+id/responseText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
Activity Class
class MainActivity : AppCompatActivity() {
private lateinit var transferApi: TransferApi
private val bankInput = "044"
private val numberInput = "0690000040"
private val amountInput = 500
private val currency = "NGN"
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val secret = "SECRET_KEY"
val retrofit = Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.client(OkHttpClient.Builder().addInterceptor { chain ->
val request = chain.request().newBuilder().addHeader("Authorization", "Bearer $secret").build()
chain.proceed(request)
}.build())
.build()
transferApi = retrofit.create(TransferApi::class.java)
createTransfer()
}
private fun createTransfer(){
val transferCode = Transfer(bankInput,numberInput,amountInput,currency)
val call = transferApi.createTransfer(transferCode)
call.enqueue(object : Callback<Transfer> {
@SuppressLint("SetTextI18n")
override fun onResponse(call: Call<Transfer>, response: Response<Transfer>) {
if (!response.isSuccessful) {
responseText.text ="Code${response.code()}"
return
}
responseText.text = response.body().toString()
}
override fun onFailure(call: Call<Transfer>, t: Throwable) {
responseText.text = (t.message)
}
})
}
}
我收到回复
{
accountBank = null,
accoutNumber = null,
amount = null,
currency = null
}
我想提议回复above.Your帮助将不胜感激!!!
您的 Transfer
class 似乎并不代表实际回复。你需要一个包装器,像这样:
data class TransferResponse(
val status: String,
val message: String,
val data: Transfer
)
然后您需要将 API 接口更改为 return 这个包装器。