2015-11-22 45 views
0

我想与我的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)代码和改造的地方,或者如果我在网络服务器上做错了什么。

任何帮助将不胜感激。

+0

您的json存在问题,但我没有看到您设置的位置。 – nasch

+0

这个异常非常具有描述性,Retrofit期待像{“key”:“value”}这样的JSON对象,但是响应是一个简单的字符串..您可以使用.setLogLevel(RestAdapter.LogLevel.FULL)在您的RestAdapter.Builder() – luciofm

+0

你可以发布你的PHP输出的JSON吗? –

回答

0

我发现一种方法来解决它我自己,所以我想我应该在这里发布我的解决方案,以便它可以帮助别人..即使我不知道为什么我的第一个解决方案不起作用。 通过删除注解@FormUrlEncoded并将@Field('data')更改为@Body,它实际上工作。现在界面看起来像这样。

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

无论如何,我真的很感谢我从这里的人那里得到的所有帮助。