android - API.java.lang.IllegalStateException:应为 BEGIN_OBJECT,但在第 1 行第 56 列为 STRING
问题描述
JSON
{
"status": "success",
"message": "User Registered Successfully",
"data": {
"name": "pooja",
"mobile_no": "8211111111",
"email": "pooja@gmail.com",
"referal_id": null,
"password": "$2y$10$AaleHI56",
"created_at": "2021-01-27T09:21:35.056380Z",
"updated_at": "2021-01-27T09:21:35.056411Z"
}
}
我已经从 jsonschema2pojo 创建了类,并且已经多次验证 json 是否有效,但我仍然收到此错误
为上述 json 创建了两个类 - SignUpResponse,SignUpData
public interface RetrofitServicesSignUp {
@FormUrlEncoded
@POST("/api/passenger-register")
Call<SignUpResponse> savePost(
@Field("name") String name,
@Field("mobile_no") String mobile_no,
@Field("email") String email,
@Field("password") String password,
@Field("password_confirm") String password_confirm,
@Field("referal_id") String referal_id,
@Field("device_token") String device_token
// @Field("device_token") String device_token
);
}
MainActivity 是
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.sign_up_layout);
mAPISignUpInterfaceService = ApiUtilsSignUp.getAPIService();
username = edtUserName.getText().toString();
password = edtPassword.getText().toString();
phoneStringValue = edtPhoneNumber.getText().toString();
conPassword = edtConfirmPassword.getText().toString();
email = edtEmail.getText().toString();
referralcode = edtReferralCode.getText().toString();
btnSignUp.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
boolean failFlag = false;
stringPhoneNumberlength = edtPhoneNumber.getText().toString().length();
if (edtUserName.getText().toString().trim().length() == 0) {
failFlag = true;
edtUserName.setError("Fill name");
}
//As above have done checking with empty field
if (failFlag == false) {
//none of the edit text is empty so good to go
sendPost(username,phoneStringValue,email,password,conPassword,referralcode);
}
}
public void sendPost(String namee, String mobilenumberba, String emaill,String passwordd, String confirmpasswordd,String referalcodee ) {
mAPISignUpInterfaceService.savePost(namee,mobilenumberba,emaill,passwordd,confirmpasswordd,referalcodee,"abcdef").enqueue(new Callback<SignUpResponse>() {
@Override
public void onResponse(Call<SignUpResponse> call, Response<SignUpResponse> response) {
if(response.isSuccessful()) {
SignUpResponse jsonSignUpResponse = response.body();
Log.i(TAG, "Token from JsonResponse: " + jsonSignUpResponse.getStatus());
Log.i(TAG, "Token from JsonResponse: " + jsonSignUpResponse.getMessage());
}
}
@Override
public void onFailure(Call<SignUpResponse> call, Throwable t) {
Log.e(TAG, "Unable to submit post to API."+t.getCause());
}
});
}
});
}
}
注册数据
public class SignUpData {
@SerializedName("name")
@Expose
private String name;
@SerializedName("mobile_no")
@Expose
private String mobileNo;
@SerializedName("email")
@Expose
private String email;
@SerializedName("referal_id")
@Expose
private Object referalId;
@SerializedName("password")
@Expose
private String password;
@SerializedName("created_at")
@Expose
private String createdAt;
@SerializedName("updated_at")
@Expose
private String updatedAt;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getMobileNo() {
return mobileNo;
}
public void setMobileNo(String mobileNo) {
this.mobileNo = mobileNo;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public Object getReferalId() {
return referalId;
}
public void setReferalId(Object referalId) {
this.referalId = referalId;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getCreatedAt() {
return createdAt;
}
public void setCreatedAt(String createdAt) {
this.createdAt = createdAt;
}
public String getUpdatedAt() {
return updatedAt;
}
public void setUpdatedAt(String updatedAt) {
this.updatedAt = updatedAt;
}
}
注册响应
public class SignUpResponse {
@SerializedName("status")
@Expose
private String status;
@SerializedName("message")
@Expose
private String message;
@SerializedName("data")
@Expose
private SignUpData data;
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public SignUpData getData() {
return data;
}
public void setData(SignUpData data) {
this.data = data;
}
}
所以现在json是正确的那么为什么这个错误我也提到了这个“预期的BEGIN_OBJECT但在第1行第1列是STRING” 并检查了json是否有效并在android studio中尝试了clean and rebuild选项
解决方案
推荐阅读
- java - 如何使用 javafx 中边框窗格的事件处理程序实现调整大小事件?
- elasticsearch - 术语查询返回 0 个结果 elasticsearch
- c# - Create a Scriptable Object Instance through a Constructor
- java - Arraylist 查找连续重复元素的计数
- sql - 有没有办法在 sql 中将 2018 年 8 月 31 日星期五 12:12 PM 转换为这种格式 2018-08-31 12:12 PM?
- java - 如何在放心中获得大于指定值的值
- apache-kafka - Kafka Streams:如何在 Streamer 代码中获取轮询批量大小 - 高级消费者
- android - Android EditText over NativeActivity:长按弹出点击在某些设备上不起作用
- excel - 使用索引匹配查找区域中的第二个匹配列
- c# - 在 Visual Studio 2017 C# 中找不到 Microsoft.Office.Interop.Access 的参考