我想与我的PHP Web服务(谷歌应用程序引擎)进行通信,但它一直与身体作为空响应,也触发失败()方法的改造(回调)。翻新1.9保持调用失败,并返回空体
我调试的时候得到它失败(),出现以下错误信息:
retrofit.RetrofitError: com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 1 path $
首先这里是我引发的请求,我的web服务代码:
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类用于管理请求和响应: http://pastebin.com/Q8bzqQ0M
并且请求和响应的模型类: http://pastebin.com/aB98Yiua
这是我的JSON请求看起来像:
{
data{
"email": "[email protected]",
"firstname": "regdrgersf",
"lastname": "regdrgersf",
"password": "hejhejhej",
"username": "regdrgersf"
}
}
我也认为这是相关的,包括部分在那里我收到我的web请求:
<?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)代码和改造的地方,或者如果我在网络服务器上做错了什么。
任何帮助将不胜感激。
您的json存在问题,但我没有看到您设置的位置。 – nasch
这个异常非常具有描述性,Retrofit期待像{“key”:“value”}这样的JSON对象,但是响应是一个简单的字符串..您可以使用.setLogLevel(RestAdapter.LogLevel.FULL)在您的RestAdapter.Builder() – luciofm
你可以发布你的PHP输出的JSON吗? –