从改装响应中获取错误的数据类型

getting wrong data type from retrofit response

我从 retrofit2 响应中得到 userId 作为 double,但是在服务器端的响应是 string

改造响应

{
    "UserId": 1.0,
    "UserName": "suresh",
    "SiteCode": 0.0,
    "FullName": "suresh, suresh",
    "Employeecode": 0.0,
    "IsActive": 0.0,
    "ProfileURL": ""
}

服务器响应

{
    "UserId": "1",
    "UserName": "suresh",
    "SiteCode": 0.0,
    "FullName": "suresh, suresh",
    "Employeecode": 0.0,
    "IsActive": 0.0,
    "ProfileURL": ""
}

为什么会这样,请问是什么原因,如何解决

如何获得以下作为我的回复?

{
    "UserId": "1",
    "UserName": "suresh",
    "SiteCode": 0.0,
    "FullName": "suresh, suresh",
    "Employeecode": 0.0,
    "IsActive": 0.0,
    "ProfileURL": ""
}

这是我的休息客户

public static Retrofit getClient() {
        try {
            retrofit = null;
            if (retrofit == null) {

                OkHttpClient client = new OkHttpClient.Builder()
                        .connectTimeout(100, TimeUnit.SECONDS)
                        .readTimeout(100,TimeUnit.SECONDS).build();

                         retrofit = new Retrofit.Builder()
                        //.baseUrl("http://192.168.1.138/OMS_Orders/").client(client)
                        .baseUrl("someURL").client(client)
                        .addConverterFactory(GsonConverterFactory.create())
                        .build();
            }
            return retrofit;
        } catch (Exception ex) {
            Log.d("Exceptionerror", ex.toString());
        }
        return retrofit;
    }

和pojo class代码是

public class LoginDTO {
 @SerializedName("SiteCode")
    private String SiteCode;

    @SerializedName("FullName")
    private String FullName;

    @SerializedName("Employeecode")
    private String Employeecode;

    @SerializedName("UserId")
    private String UserId;
}

确保你的 POJO class 数据如下

public class DataList {

@SerializedName("UserId")
@Expose
private String userId;
@SerializedName("UserName")
@Expose
private String userName;
@SerializedName("SiteCode")
@Expose
private Double siteCode;
@SerializedName("FullName")
@Expose
private String fullName;
@SerializedName("Employeecode")
@Expose
private Double employeecode;
@SerializedName("IsActive")
@Expose
private Double isActive;
@SerializedName("ProfileURL")
@Expose
private String profileURL;

public String getUserId() {
return userId;
}

public void setUserId(String userId) {
this.userId = userId;
}
}

服务器以 [​​=11=] 是 string 的方式向您提供响应。 String 的值用双引号括起来,即。 (“”)。

现在,如果您想在服务器响应中获得 userIddouble 值,则必须更改用 php 或其他方式编写的后端代码。

但是您可以轻松地为您的回复制作一个 POJO class,例如:

public class Response
{
    private String UserName;

    private String SiteCode;

    private String UserId;

    private String Employeecode;

    private String IsActive;

    private String FullName;

    private String ProfileURL;

    public String getUserName ()
    {
        return UserName;
    }

    public void setUserName (String UserName)
    {
        this.UserName = UserName;
    }

    public String getSiteCode ()
    {
        return SiteCode;
    }

    public void setSiteCode (String SiteCode)
    {
        this.SiteCode = SiteCode;
    }

    public String getUserId ()
    {
        return UserId;
    }

    public void setUserId (String UserId)
    {
        this.UserId = UserId;
    }

    public String getEmployeecode ()
    {
        return Employeecode;
    }

    public void setEmployeecode (String Employeecode)
    {
        this.Employeecode = Employeecode;
    }

    public String getIsActive ()
    {
        return IsActive;
    }

    public void setIsActive (String IsActive)
    {
        this.IsActive = IsActive;
    }

    public String getFullName ()
    {
        return FullName;
    }

    public void setFullName (String FullName)
    {
        this.FullName = FullName;
    }

    public String getProfileURL ()
    {
        return ProfileURL;
    }

    public void setProfileURL (String ProfileURL)
    {
        this.ProfileURL = ProfileURL;
    }

    @Override
    public String toString()
    {
        return "Response [UserName = "+UserName+", SiteCode = "+SiteCode+", UserId = "+UserId+", Employeecode = "+Employeecode+", IsActive = "+IsActive+", FullName = "+FullName+", ProfileURL = "+ProfileURL+"]";
    }
}

并且当你需要 userId 作为双倍时,你可以 double num = Double.parseDouble(StringValue);