【发布时间】:2019-11-01 11:07:19
【问题描述】:
我只是想在使用 Retrofit 访问 API 后显示用户数据。我的 api 响应是:
{
"password":"111222333",
"name":"test name",
"email":"testem@gmail.com",
"username":"test1",
"customer_id":"201060",
"phone":"0196789"
}
但不幸的是,我得到了
“应为 BEGIN_OBJECT,但在第 1 行第 1 列路径 $ 处为 STRING” 错误。
我完全坚持显示我的 json 响应。
我的 User.java 类:
public class User {
@SerializedName("name")
@Expose
private String name;
@SerializedName("email")
@Expose
private String email;
@SerializedName("username")
@Expose
private String username;
@SerializedName("customer_id")
@Expose
private String customerId;
@SerializedName("phone")
@Expose
private String phone;
@SerializedName("password")
@Expose
private String password;
public String getName() {
return name;
}
public String getEmail() {
return email;
}
public String getUsername() {
return username;
}
public String getCustomerId() {
return customerId;
}
public String getPhone() {
return phone;
}
public String getPassword() {
return password;
}
}
我的登录类:
Gson gson = new GsonBuilder().setLenient().create();
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://us-central1-gmx-notification.cloudfunctions.net/")
.addConverterFactory(GsonConverterFactory.create(gson))
.build();
all_api = retrofit.create(allApi.class);
private void getUserDetails(String userName,String passWord){
Call<User> call = all_api.getUserDetails(userName,passWord);
call.enqueue(new Callback<User>() {
@Override
public void onResponse(Call<User> call, Response<User> response) {
if(!response.isSuccessful()){
Log.d(response.body());
}
else{
User user = response.body();
String content = "";
content+= "Name: "+user.getName()+"\n";
content+= "Email: "+user.getEmail()+"\n";
content+= "Customer ID: "+user.getCustomerId()+"\n";
content+= "Phone: "+user.getPhone()+"\n";
Log.d(content);
}
});
}
和我的改造 api 类:
package com.material.components;
import java.util.List;
import retrofit2.Call;
import retrofit2.http.GET;
import retrofit2.http.Query;
public interface allApi {
@GET("login")
Call <User> getUserDetails(
@Query("email") String email,
@Query("password") String password
);
}
【问题讨论】:
-
能否附上 Postman 的截图,我们可以看到来自后端的模型?因为从您的错误中,我看到您的模型无法响应,但是您的模型看起来不错。我猜你的回答有点像这样 { data { 'usermode' } }
-
请发布您在点击 api 后得到的完整响应字符串
-
如果您没有 Postman,您可以将 Interceptor 添加到 OkHttpClient 以查看后端发送给您的内容。