我想从 kotlin 发送一个 Json 对象到我的 php 服务器。我的问题是我在 php.ini 中收到一个 null 对象。我读过类似的问题,但没有一个解决我的问题。这是我在 kotlin 中的代码:
val retrofit = Retrofit.Builder().baseUrl(BASE_URL)
.client(okHttpClient)
.addConverterFactory(GsonConverterFactory.create())
.build()
val apiService = retrofit.create(ApiService::class.java)
//-------------------------------------------------
val issueJson = JSONObject()
issueJson.put("issueLine", "123")
issueJson.put("issueActivity", "Main")
issueJson.put("issueFragment", "map")
issueJson.put("issueExplanation", "---")
val call = apiService.test(issueJson)
call.enqueue(object : Callback<TestInfo> {
override fun onResponse(call: Call<TestInfo>, response: Response<TestInfo>) {
Log.d("test", "ok")
if (response.isSuccessful) {
Log.d("test", response.body().toString())
} else {
Log.d("test", response.errorBody().toString())
}
}
override fun onFailure(call: Call<TestInfo>, t: Throwable) {
Log.d("test", "no")
Log.d("test", t.toString())
}
}
)
//-------------------------------------------------
data class TestInfo(
val lineNumber:String,
val activityName:String,
val fragmentName:String,
val isueExplanation:String,
)
//-------------------------------------------------
interface ApiService {
@POST("hamrahenet/test.php")
fun test(@Body body: JSONObject): Call<TestInfo>
}
这是我在 php 中的代码:
<?php
$json = file_get_contents("php://input");
$array = json_decode($json, true);
echo json_encode($array);
我在 Kotlin 中收到了这个结果:
D/test: ok D/test: TestInfo(lineNumber=null, activityName=null, fragmentName=null, isueExplanation=null)
所有键的值为空。 如果有人能帮助我,我将非常感激
我首先删除
JSONObject
并使用 TestObject
来发送和接收。您的 PHP 代码似乎回显了它收到的相同内容,但您发送的 JSON 与您期望接收的 JSON 几乎没有相似之处。
val issueJson = JSONObject()
issueJson.put("issueLine", "123")
issueJson.put("issueActivity", "Main")
issueJson.put("issueFragment", "map")
issueJson.put("issueExplanation", "---")
这将创建一个 JSON 对象,其字段名为
issueLine
、issueActivity
、issueFragment
和 issueExplanation
。
data class TestInfo(
val lineNumber:String,
val activityName:String,
val fragmentName:String,
val isueExplanation:String,
)
这些属性都不与 JSON 字段匹配。最接近的是
isueExplanation
,它与issueExplanation
非常相似,但它们并不相同。为了让 Gson 将传入的 JSON 解析为 TestInfo
对象,JSON 字段需要匹配 TestInfo
属性。