java - 响应为 JSON(改造 + Android + PHP Slim 框架)
问题描述
我正在使用 PHP Slim 框架为 Android 应用程序构建 REST API。
我在应用程序中发布正文,它运行良好并将数据添加到 MySQL。但我很难回应。
我的响应 JSON 模型很简单;
{success:'yes'}
当我在添加数据后尝试获得响应时,Retrofit 会使用 onFailure 方法。但添加数据效果很好。我不知道我错过了哪里。这是我的代码;
PHP Slim 框架文件
$response->withHeader('Content-Type', 'application/json');
$response->getBody()->write("{success:'yes'}");
return $response;
} catch (PDOException $e) {
echo '{"error": {"text": ' . $e->getMessage() . '}';
}
Android 响应模型
public class Response_Success {
@SerializedName("success")
@Expose
String success;
public Response_Success(String success) {
this.success = success;
}
public String getSuccess() {
return success;
}
public void setSuccess(String success) {
this.success = success;
}
接口类
public interface API_Service {
@Headers("content-type: application/json")
@POST("api/user/add")
Call<Response_Success> addFacebookUser(@Body UserFacebook userFacebook);}
MainActivity 中的 API 调用
API_Service service = Client.getRetrofitInstance().create(API_Service.class);
Call<Response_Success> userFacebookCall = service.addFacebookUser(userNew);
userFacebookCall.enqueue(new Callback<Response_Success>() {
@Override
public void onResponse(Call<Response_Success> call, Response<Response_Success> response) {
Toast.makeText(MainActivity.this, ""+response.body().getSuccess(), Toast.LENGTH_SHORT).show();
}
@Override
public void onFailure(Call<Response_Success> call, Throwable t) {
Toast.makeText(MainActivity.this, "was wrong", Toast.LENGTH_SHORT).show();
}
});
android studio中的调试模式;我得到 MaltFormedJsonException,但我在 try catch 中添加了该异常。
解决方案
您的 Json 响应
{成功:'是'}
是无效的。键和(字符串)值必须用双引号括起来。
要么确保您的回复用双引号引起来:
{“成功”:“是”}
或者试试这个:
$response = array();
$response["success"] = "yes";
echo json_encode($response);
注意:您可以在以下位置检查任何 JSON 字符串是否有效: https ://jsonlint.com/ 或 https://jsonformatter.curiousconcept.com/
推荐阅读
- r - R Shiny,没有堆栈跟踪和未使用的参数
- python - IndexError:调试 Python 脚本中的列表索引超出范围
- javascript - VueJS:在href中使用变量
- swiftui - SwiftUI 组合函数 -> 任何发布者返回类型
- javascript - 使用选择多个使用谷歌应用程序脚本将多个值发送到谷歌表格
- python - 使用python读取多行不同数据类型
- azure - 获取 ADLS 目录和子目录路径,直到它使用 databricks 获取表中的文件格式
- canvasjs - 如何在canvasjs中禁用金字塔图的扩展区域
- google-apps-script - 如何执行 Google Add-on 自动部署/发布?
- zlib - 多线程压缩、随机访问和即时读取