如何通过 android 中的改造从 php 中检索 "String response"?

How is it possible to retrieve "String response" from php via retrofit in android?

我需要通过 retrofit 将我的 android 应用程序中的一些数据插入数据库,其界面部分如下所示:

@FormUrlEncoded
    @POST("*****")
    Call<model> insertChordReq(@FieldMap Map<String, String> fields);

retrofit 将数据从 @POST 注释发送到 php 文件。 php代码如下:

<?php

$sN = $_REQUEST['sN'];
$siN = $_REQUEST['siN'];
$soT = $_REQUEST['soT'];


try {
    $connection = new PDO("mysql:host=******;dbname=*******", "******", "******");
    $connection->exec('set names utf8');
    $insertQuery = "INSERT INTO table (sN, siN, soT) VALUES ('$sN', '$siN', '$soT')";
    if ($connection->exec($insertQuery)){
        echo 'درخواست شما با موفقیت ثبت گردید';
    }else{
        echo 'error';
    }
} catch (PDOException $e) {
    echo $e;
}

然后我想在我的应用程序中显示字符串响应 echo 'درخواست شما با موفقیت ثبت گردید'; ;但问题是改造并没有 return 它作为回应。相反,我通过 onFailure:

收到错误
java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 1 path $

我不得不提一下,插入数据库的过程已成功完成,但我需要得到指定的响应。

有什么方法可以通过retrofit得到string吗?

有没有办法把字符串变成json,然后通过retrofit得到?

我已经在 Whosebug 中搜索了现有的问题。不幸的是我没有找到确切的解决方案。

您必须对 PHP 文件以及 android 接收器部分进行一些修改,如下所示。 echo 仅输出 php 文件中的字符串,但您的改装模块需要 json 发出。添加JSON_UNESCAPED_UNICODE以支持非英文支持。您还应该考虑在改进的 API 界面中也保留相同的 json 格式。这里我添加了字符串作为相同的响应格式,您可以在方便的时候更改它....

已编辑

 echo json_encode('درخواست شما با موفقیت ثبت گردید',JSON_UNESCAPED_UNICODE);

在您的 android 代码中

@FormUrlEncoded
    @POST("*****")
    Call<String> insertChordReq(@FieldMap Map<String, String> fields);

此外,我发现这个问题可以通过更改 call<type> 来解决。使用 Void 而不是 model returns 响应(不是失败),这将有助于在 onResponse 上的某些条件下处理 UI/UX:

@FormUrlEncoded
    @POST("*****")
    Call<Void> insertChordReq(@FieldMap Map<String, String> fields);