我正在用Kotlin PHP MySql开发一个应用程序。
如果有人知道为什么我在调用createUser函数时会出现此异常“com.google.gson.stream.MalformedJsonException:使用JsonReader.setLenient(true)在第1行第1列路径接受格式错误的JSON”,我将不胜感激。
当我使用相同的api调用getUser函数时,我没有得到异常。
我在《邮差》中检查了这两个功能。JSON格式正确。以“<代码>{”键“:”值“,”键1“:”值1“,…}开头
这是我的api:
interface Api {
...
@POST("/api/v1/users/register_user.php")
suspend fun createUser(
@Body userDto: UserInfoPreviewDto
) : QueryResponse
@POST("/api/v1/users/get_user.php")
suspend fun getUser(
@Body jsonObject : JsonObject
) : UserDto
}
和我的Retrofit实例:
Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build()
.create(RamonApiUser::class.java)
我的服务器端php代码是register\u user。php文件:
header("Access-Control-Allow-Origin: *");
header("Content-Type: application/json; charset=UTF-8");
header("Access-Control-Allow-Methods: POST");
header("Access-Control-Allow-Headers: Content-Type, Access-Control-Allow-
Headers, Authorization, X-Requested-With");
include_once("../../config/database.php");
include_once("../../classes/user.php");
$db = new Database();
$connection = $db->connect();
$user = new User($connection);
if($_SERVER['REQUEST_METHOD'] === "POST") {
$data = json_decode(file_get_contents("php://input"));
$user->username = $data->username;
$user->password = $data->password;
$user->fullname = $data->fullname;
$user->email = $data->email;
if($user->register()) {
http_response_code(200);
$result = array(
"status" => "200",
"message" => "saved"
);
echo json_encode($result);
}
else {
http_response_code(500);
echo json_encode(array(
"status" => "500",
"message" => "Error 500"
));
}
}
else {
http_response_code(503);
echo json_encode(array(
"status" => "503",
"message" => "Error 503"
));
}
这是我的get\u用户。php文件:
header("Access-Control-Allow-Origin: *");
header("Content-Type: application/json; charset=UTF-8");
header("Access-Control-Allow-Methods: POST");
header("Access-Control-Allow-Headers: Content-Type, Access-Control-Allow-Headers,
Authorization, X-Requested-With");
include_once("../../config/database.php");
include_once("../../classes/user.php");
$db = new Database();
$connection = $db->connect();
$user = new User($connection);
if($_SERVER['REQUEST_METHOD'] === "POST") {
$param = json_decode(file_get_contents("php://input"));
if(!empty($param->id)) {
$user->id = $param->id;
$user_data = $user->getById();
if (!empty($user_data)) {
http_response_code(200);
$user_data['isPublicProfile'] = (bool)$user_data['isPublicProfile'];
$user_data['isLastOnlineVisible'] =
(bool)$user_data['isLastOnlineVisible'];
$user_data['isPhoneNumberVisible'] =
(bool)$user_data['isPhoneNumberVisible'];
echo json_encode($user_data);
}
}
}
else {
http_response_code(503);
echo json_encode(array(
"status" => "0",
"message" => "503 error"
));
}
user中的getById()函数。php:
public function getById() {
$sqlQuery = "SELECT * FROM ". $this->table_name ." WHERE id = ? LIMIT 0,1";
$obj = $this->conn->prepare($sqlQuery);
$obj->bind_param("i", $this->id);
$obj->execute();
$data = $obj->get_result();
return $data->fetch_assoc();
}
我在客户端有查询响应数据类,其中包含字段状态和消息。用户-
$query_response = new QueryResponse();
$query_response->status = "200";
$query_response->message = "registration successful";
$echo json_encode($query_response);
它也没有帮助。
我创建了另一个名为get_query_response.php.的文件,只是为了确保我的查询响应类是正常的,不会抛出异常。
get_query_response.php:
....
include_once("../../config/database.php");
include_once("../../classes/query_response.php");
$db = new Database();
$connection = $db->connect();
$query_response = new QueryResponse($connection);
if($_SERVER['REQUEST_METHOD'] === "POST") {
$query_response->id = 1;
$query_response_data = $query_response->getById();
// I fetch query_response_data from mysql
if (!empty($query_response_data)) {
http_response_code(200);
$result = array(
"status" => "500",
"message" => "save successfully"
);
echo json_encode($result); // doesn't throw exception.
works fine
//echo json_encode($query_response_data);
//when i use this line, it doesn't throw exception
//either. works fine
}
}
我将此文件称为get\u query\u response。我的api中的php如下所示:
interface MyApi {
...
@POST("/api/v1/users/get_query_response.php")
suspend fun getQueryResponse() : QueryResponse
...
}
没有错误,没有例外。echo json\u encode($result)和echo json\u encode($query\u response\u data)都可以正常工作。两个register\u用户之间的唯一区别。php和get\u query\u response。php文件如下所示:
$data = json_decode(file_get_contents("php://input"));
我不明白这两个文件行为不同的原因。它们几乎一模一样。为什么此代码在register\u user中不起作用。php?
$result = array(
"status" => "200",
"message" => "saved successfully"
);
echo json_encode($result);
我终于解决了这个问题。这是我的数据类UserInfo。实例化期间,类的一个字段被分配为null。Api正在发送一个类,该类的两个属性具有空值。通过为这些属性指定值,可以解决此问题。
问题内容: 我正在尝试在正在构建的android应用中发出http POST请求,但是无论我使用哪个url,Eclipse都会不断引发格式错误的URL异常。我尝试了其中一个android教程中的一行代码: 甚至触发错误。Eclipse是否会为我尝试创建的任何URL不断引发此错误,原因是什么? 问题答案: 它不是在引发异常,而是在抱怨您没有处理 它可能 (即使不会) 的可能性 ,因为这种情况下的UR
我正在尝试使用改装将图像上载到本地服务器。下面是我的php代码。 但是我得到了这样一个错误:com.google.gson.stream.MalformedJsonException使用JsonReader.setLenient(true)在第1行第1列路径$处接受格式错误的JSON。 然后,我在初始化改装的类中添加了以下代码。 现在我得到以下错误:com.google.gson.JsonSynt
我想做张桌子。我希望这些数字向左对齐。我不熟悉格式化,不知道为什么会出现错误。
我想从JSON中获取一些数据,但gson给出了错误。我想知道如何解决这个问题? 我使用的是dagger2(这部分100%正常工作)和rxJava(这部分总是调用onError方法)。 我的型号: 我的JSON: 我的回应: 我的改装: 我的服务: 错误: com.google.gson.stream.MalformedJsonException:使用JsonReader.setLenient(tr
我在我的项目中使用Gson。但它返回给我错误 我得到一个服务器响应,如下所示 我有一个错误,需要一个字符串,但是BEGIN_OBJECT 我应该如何处理这个异常?? 我没有访问数据库的权限,因为我使用API
我有一个基于Spring Security OAuth2的REST应用程序。我一直试图将默认的Spring Security消息传递格式从XML更改为JSON,并取得了部分成功。 对于eg--我知道了当请求不包含承载令牌时如何更改响应格式(下面一行就是这样做的) 如何更改BadCredentialsException JSON格式?当前,它返回一个类似于上面的JSON? 下面是我的applicat