如何通过 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);
我需要通过 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);