Я пытаюсь связаться с моим php webservice (механизм приложений Google), но он продолжает отвечать с нулевым значением body, а также вызывает метод fail () дооснащения (обратного вызова).
Я получаю следующее сообщение об ошибке в fail () при его отладке:
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 для управления запросами и ответами:
http://pastebin.com/Q8bzqQ0M
И модель классов для запросов и ответов:
http://pastebin.com/aB98Yiua
Вот как выглядит мой запрос json:
{
data{
"email": "[email protected]",
"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) и модернизации, или я делаю что-то неправильно на веб-сервере.
Любая помощь будет оценена.
Я нашел способ исправить это сам, поэтому я думаю, что я должен опубликовать свое решение здесь, чтобы оно могло помочь другим … хотя я не уверен, почему мое первое решение не сработало.
Удалив аннотацию @FormUrlEncoded и изменив @Field (‘data’) на @Body, это действительно сработало. Теперь интерфейс выглядит так.
private interface webServiceInterface {
@POST(WebServiceManager.REQUEST_REGISTER)
void register(@Body RegisterRequest registerRequest, Callback<RegisterResponse> response);
}
В любом случае, я действительно ценю всю помощь, которую я получил от людей здесь.
Других решений пока нет …