Retrofit 2.0 的一个非常令人失望的特性是它不能准确地说明解析响应失败的地方。因此,在邮递员中,当我使用相同的正文点击请求时,我得到的登录响应为:
{
"result": "success",
"response_code": 200,
"data": {
"id": "1",
"display_name": "admin",
"email": "payal@teckmovers.com",
"username": "admin",
"access_token": "8daa8e02ca432e51ae90912fbf63eeea"
}
}
Run Code Online (Sandbox Code Playgroud)
但是当我在 Retrofit 中使用完全相同的 body 发出完全相同的请求时,我得到了一个非常奇怪的响应:{protocol=http/1.1, code=200, message=OK, url= http://192.168.0.52/evidya /wp-api/v1/user/login }。现在我已经通过上述问题解决了其他相关问题,但没有一个对我有用。请帮忙。我的代码:
改造API接口:
public interface eVidyaApi {
@FormUrlEncoded
@POST("user/login")
Call<LoginResponse> loginUser(
@HeaderMap Map<String, String> headers,
@Field("email") String email,
@Field("password") String password
);
}
Run Code Online (Sandbox Code Playgroud)
登录功能:
public void login() {
Log.d(TAG, "Login");
if (!validate()) {
onLoginFailed();
return;
}
final ProgressDialog progressDialog = new ProgressDialog(LoginActivity.this, R.style.MyDialogTheme);
progressDialog.setIndeterminate(true);
progressDialog.setMessage("Authenticating...");
progressDialog.show();
String email = …Run Code Online (Sandbox Code Playgroud) 我在邮递员上传递了更新用户请求并得到了成功的响应(见图),现在当我尝试在我的应用程序中使用 Retrofit 2 执行相同操作时,我收到错误为com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 1 path $. 有趣的是,我之前遇到过这个错误,我知道如果我的模型不符合响应,通常会发生这种情况。但这次我想我已经检查了所有的框,但还是出现了错误。如果有人能弄清楚我哪里出错了......
我在邮递员中的回应:
我的pojo:
package com.example.evidya.Retrofit.Model.EditModel;
import java.util.List;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
public class EditResponse {
@SerializedName("result")
@Expose
private String result;
@SerializedName("response_code")
@Expose
private Integer responseCode;
@SerializedName("msg")
@Expose
private String msg;
@SerializedName("data")
@Expose
private List<Object> data = null;
public String getResult() {
return result;
}
public void setResult(String result) {
this.result = result;
}
public Integer getResponseCode() {
return responseCode;
}
public …Run Code Online (Sandbox Code Playgroud)