从 kotlin 发送一个 Json 对象到 php,但在 php 服务器中收到一个空对象

问题描述 投票:0回答:1

我想从 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)

所有键的值为空。 如果有人能帮助我,我将非常感激

php android json kotlin retrofit2
1个回答
0
投票

我首先删除

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
属性。

© www.soinside.com 2019 - 2024. All rights reserved.