2015-11-22 2 views
0

Я пытаюсь установить связь с моим php webservice (движок Google), но он продолжает отвечать за тело как нуль, а также вызывает метод() обратного вызова метода fail().retrofit 1.9 продолжает вызывать сбой и возвращает null body

я получаю следующее сообщение об ошибке в случае ошибки(), при отладке его:

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) коде и модифицировать, или если я делаю что-то не так на веб-сервере.

Любая помощь будет принята с благодарностью.

+0

Проблема с вашим json, но я не вижу, где вы это устанавливаете. – nasch

+0

Исключением является довольно описательный, «Дооснащение» ожидало объект JSON, например «ключ»: «значение»}, но ответ был простой строкой. Вы можете отлаживать ответ с помощью .setLogLevel (RestAdapter.LogLevel.FULL) на своем RestAdapter.Builder() – luciofm

+0

Можете ли вы опубликовать JSON, который выводит ваш PHP? –

ответ

0

Я нашел способ исправить это сам, поэтому я думаю, что должен опубликовать свое решение здесь, чтобы оно могло помочь другим. Хотя я не уверен, почему мое первое решение не сработало. Удалив аннотацию @FormUrlEncoded и изменяя @Field ('data') на @Body, она действительно сработала. Теперь интерфейс выглядит так.

private interface webServiceInterface { 
    @POST(WebServiceManager.REQUEST_REGISTER) 
    void register(@Body RegisterRequest registerRequest, Callback<RegisterResponse> response); 
} 

В любом случае, я очень ценю всю помощь, которую я получил от людей здесь.

Смежные вопросы