![](/img/trans.png)
[英]PHP Post body is null with Retrofit when it's not null
[英]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.