如何通过 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<type>
来解决。使用Void
而不是model
返回响应(不是失败),这将有助于处理UI/UX
与onResponse
上的某些条件:
@FormUrlEncoded
@POST("*****")
Call<Void> insertChordReq(@FieldMap Map<String, String> fields);
【讨论】:
以上是关于如何通过 android 中的改造从 php 中检索“字符串响应”?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 HashMap 从 Android 的 Firebase 中的子节点获取数据?