如何通过 android 中的改造从 php 中检索“字符串响应”?

Posted

技术标签:

【中文标题】如何通过 android 中的改造从 php 中检索“字符串响应”?【英文标题】:How is it possible to retrieve "String response" from php via retrofit in android? 【发布时间】:2020-03-23 03:47:34 【问题描述】:

我需要通过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 'درخواست شما با موفقیت ثبت گردید'; ;但问题是改造不会将其作为响应返回。相反,我通过onFailure 得到一个错误:

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

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

有没有办法通过改造得到字符串?

有没有办法把字符串转成json,然后通过改造得到呢?

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

【问题讨论】:

【参考方案1】:

您必须对您的 PHP 文件以及 android 接收器部分进行一些修改,如下所示。 echo 只是从 php 文件中输出字符串,但是您的改造模块需要一个 json 发射。 JSON_UNESCAPED_UNICODE 被添加以支持非英语支持。您还应该考虑在改造 API 接口中保持相同的 json 格式。这里我添加了字符串作为相同的响应格式,你方便的时候改变它....

已编辑

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

在你的安卓代码中

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

【讨论】:

它可以工作,但仍然没有返回String。但是,我能够以这种方式管理我想做的事情。谢谢你!它返回一个响应(不是失败),所以我可以使用条件来处理事件。 . .【参考方案2】:

另外,我发现这个问题可以通过更改call&lt;type&gt; 来解决。使用Void 而不是model 返回响应(不是失败),这将有助于处理UI/UXonResponse 上的某些条件:

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

【讨论】:

以上是关于如何通过 android 中的改造从 php 中检索“字符串响应”?的主要内容,如果未能解决你的问题,请参考以下文章

如何通过改造解析 JSON 响应

如何使用 HashMap 从 Android 的 Firebase 中的子节点获取数据?

如何访问数组改造 2 / android studio 中的对象“播放器”

如何在android中使用改造@Query注解进行过滤

android中检測网络连接状态简单总结

如何通过改造 Android 提出请求