簡體   English   中英

改進版1.9繼續調用失敗並返回空主體

[英]retrofit 1.9 keeps calling failure and returns null body

我正在嘗試與我的php webservice(谷歌應用引擎)進行通信,但是它始終以body為null進行響應,並且還觸發了afterfailure()方法的改進(回調)。

調試它時,我在failure()中收到以下錯誤消息:

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": "regd@rgersf.dk",
        "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)代碼和改型中,或者我在網絡服務器上做錯了什么。

任何幫助將不勝感激。

我找到了一種自己解決問題的方法,因此我認為我應該在此處發布解決方案,以便對其他人有所幫助。.即使我不確定為什么我的第一個解決方案無效。 通過刪除注釋@FormUrlEncoded並將@Field('data')更改為@Body,它實際上可以工作。 界面現在看起來像這樣。

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

無論如何,我真的很感謝我在這里得到的所有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM