改造 1.9 不断调用失败和 returns 空体
retrofit 1.9 keeps calling failure and returns null body
我正在尝试与我的 php 网络服务(google 应用引擎)进行通信,但它一直以 body 为 null 进行响应,并且还触发了改造(回调)的 failure() 方法。
我在调试 failure() 时收到以下错误消息:
retrofit.RetrofitError: com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 1 path $
首先是触发对我的网络服务的请求的代码:
WebServiceManager.getInstance().registerRequest(email, password, username, firstname, lastname, new Callback<RegisterResponse>() {
@Override
public void success(RegisterResponse registerResponse, Response response) {
Toast.makeText(context, registerResponse.getToken() + "", Toast.LENGTH_LONG).show();
}
@Override
public void failure(RetrofitError error) {
Toast.makeText(context,"error ", Toast.LENGTH_LONG).show();
}
});
这是我的 WebServiceManager class 用于管理请求和响应:
http://pastebin.com/Q8bzqQ0M
请求和响应的模型 classes:
http://pastebin.com/aB98Yiua
这是我的 json 请求的样子:
{
data{
"email": "regd@rgersf.dk",
"firstname": "regdrgersf",
"lastname": "regdrgersf",
"password": "hejhejhej",
"username": "regdrgersf"
}
}
我也认为在我的网络服务上包含我收到请求的部分是相关的:
<?php
require '../functions/db.php';
$data = getJsonRequest();
$email = $data['data']['email'];
$password = $data['data']['password'];
$username = $data['data']['username'];
$firstname = $data['data']['firstname'];
$lastname = $data['data']['lastname'];
$facebookID = $data['data']['facebookID'];
$dbClass = new DBClass();
$result = $dbClass->register($email, $password, $username, $firstname, $lastname, $facebookID);
$response = array();
if ($result == $dbClass->error_input || $result == $dbClass->error_email_exists || $result == $dbClass->error_unknown || $result == $dbClass->error_db_connection) {
$response['status'] = false;
$response['error'] = $result;
} else {
$response['status'] = true;
$response['token'] = $result;
}
sendJsonResponse($response);
?>
以及用于发送响应的函数"sendJsonResponse($response)":
function sendJsonResponse($response) {
header('HTTP/1.1 200 OK');
header('Content-type: application/json');
echo json_encode($response);
}
我不知道问题出在我的 java (android) 代码和改造中,还是我在网络服务器上做错了什么。
任何帮助将不胜感激。
我找到了自己修复它的方法,所以我认为我应该 post 在这里提出我的解决方案,这样它可能会帮助其他人.. 尽管我不确定为什么我的第一个解决方案不起作用。
通过删除注解@FormUrlEncoded 并将@Field('data') 更改为@Body,它确实起作用了。现在界面看起来像这样。
private interface webServiceInterface {
@POST(WebServiceManager.REQUEST_REGISTER)
void register(@Body RegisterRequest registerRequest, Callback<RegisterResponse> response);
}
无论如何,我真的很感谢这里的人们提供的所有帮助。
我正在尝试与我的 php 网络服务(google 应用引擎)进行通信,但它一直以 body 为 null 进行响应,并且还触发了改造(回调)的 failure() 方法。
我在调试 failure() 时收到以下错误消息:
retrofit.RetrofitError: com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 1 path $
首先是触发对我的网络服务的请求的代码:
WebServiceManager.getInstance().registerRequest(email, password, username, firstname, lastname, new Callback<RegisterResponse>() {
@Override
public void success(RegisterResponse registerResponse, Response response) {
Toast.makeText(context, registerResponse.getToken() + "", Toast.LENGTH_LONG).show();
}
@Override
public void failure(RetrofitError error) {
Toast.makeText(context,"error ", Toast.LENGTH_LONG).show();
}
});
这是我的 WebServiceManager class 用于管理请求和响应: http://pastebin.com/Q8bzqQ0M
请求和响应的模型 classes: http://pastebin.com/aB98Yiua
这是我的 json 请求的样子:
{
data{
"email": "regd@rgersf.dk",
"firstname": "regdrgersf",
"lastname": "regdrgersf",
"password": "hejhejhej",
"username": "regdrgersf"
}
}
我也认为在我的网络服务上包含我收到请求的部分是相关的:
<?php
require '../functions/db.php';
$data = getJsonRequest();
$email = $data['data']['email'];
$password = $data['data']['password'];
$username = $data['data']['username'];
$firstname = $data['data']['firstname'];
$lastname = $data['data']['lastname'];
$facebookID = $data['data']['facebookID'];
$dbClass = new DBClass();
$result = $dbClass->register($email, $password, $username, $firstname, $lastname, $facebookID);
$response = array();
if ($result == $dbClass->error_input || $result == $dbClass->error_email_exists || $result == $dbClass->error_unknown || $result == $dbClass->error_db_connection) {
$response['status'] = false;
$response['error'] = $result;
} else {
$response['status'] = true;
$response['token'] = $result;
}
sendJsonResponse($response);
?>
以及用于发送响应的函数"sendJsonResponse($response)":
function sendJsonResponse($response) {
header('HTTP/1.1 200 OK');
header('Content-type: application/json');
echo json_encode($response);
}
我不知道问题出在我的 java (android) 代码和改造中,还是我在网络服务器上做错了什么。
任何帮助将不胜感激。
我找到了自己修复它的方法,所以我认为我应该 post 在这里提出我的解决方案,这样它可能会帮助其他人.. 尽管我不确定为什么我的第一个解决方案不起作用。 通过删除注解@FormUrlEncoded 并将@Field('data') 更改为@Body,它确实起作用了。现在界面看起来像这样。
private interface webServiceInterface {
@POST(WebServiceManager.REQUEST_REGISTER)
void register(@Body RegisterRequest registerRequest, Callback<RegisterResponse> response);
}
无论如何,我真的很感谢这里的人们提供的所有帮助。