【问题标题】:Unable to use POJO class to get the token and save into a string无法使用 POJO 类获取令牌并保存到字符串中
【发布时间】:2019-11-11 06:09:59
【问题描述】:

我从 API 获取数据,然后将其转换为字符串,以便我可以使用我的 POJO 类(用户和令牌)将数据保存到 sharedPref 中。我可以使用 User 类的方法,但是每当我尝试访问 Token 类的方法时,应用程序就会崩溃。 这是我收到的回复:

{
"username": "string",
"email": "string",
"firstName": "string",
"lastName": "string",
"avatarURL": "string",
"token": {
  "token": "string",
  "expiresOn": "2019-06-29T21:07:07.891Z"
}}

这是我的用户类:

public class User {
public User() {
}

@SerializedName("username")
@Expose
private String username;
@SerializedName("email")
@Expose
private String email;
@SerializedName("firstName")
@Expose
private String firstName;
@SerializedName("lastName")
@Expose
private String lastName;
@SerializedName("avatarURL")
@Expose
private String avatarURL;
@SerializedName("token")
@Expose
private Token token;

public String getUsername() {
    return username;
}

public void setUsername(String username) {
    this.username = username;
}

public String getEmail() {
    return email;
}

public void setEmail(String email) {
    this.email = email;
}

public String getFirstName() {
    return firstName;
}

public void setFirstName(String firstName) {
    this.firstName = firstName;
}

public String getLastName() {
    return lastName;
}

public void setLastName(String lastName) {
    this.lastName = lastName;
}

public String getAvatarURL() {
    return avatarURL;
}

public void setAvatarURL(String avatarURL) {
    this.avatarURL = avatarURL;
}

public Token getToken() {
    return token;
}

public void setToken(Token token) {
    this.token = token;
}}

这是我的令牌类:

public class Token {
public Token() {
}

@SerializedName("token")
@Expose
private String token;
@SerializedName("expiresOn")
@Expose
private String expiresOn;

public String getToken() {
    return token;
}

public void setToken(String token) {
    this.token = token;
}

public String getExpiresOn() {
    return expiresOn;
}

public void setExpiresOn(String expiresOn) {
    this.expiresOn = expiresOn;
}}

我请求的函数:

public void logInRequest(final String userName, String userPassword) {
    final JSONObject jsonObject = new JSONObject();
    try {

        jsonObject.put("identifier", userName);
        jsonObject.put("password", userPassword);

    } catch (JSONException e) {
        e.printStackTrace();
    }
    APIService apiService = RetrofitClient.getAPIService();
    Call<String> logInResponse = apiService.logIn(jsonObject.toString());
    logInResponse.enqueue(new Callback<String>() {
        @Override
        public void onResponse(Call<String> call, Response<String> response) {
            if (response.message().equals("OK")) {
                String data = response.body();

                Gson g = new Gson();
                Gson g1 = new Gson();
                User user = g.fromJson(data, User.class);
                Token token=g1.fromJson(data,Token.class);

                String tokenNo=token.getToken();
                String username = user.getUsername();
                String email = user.getEmail();
                String firstName = user.getFirstName();
                String lastName = user.getLastName();

                sharedPrefs.saveUserName(username);
                sharedPrefs.saveEmail(email);
                sharedPrefs.saveFullName(firstName, lastName);

                context.startActivity(new Intent(context, HomeActivity.class));
            } else {
                Toast.makeText(getApplication(), "Wrong User Name or Password", Toast.LENGTH_SHORT).show();
            }


        }

        @Override
        public void onFailure(Call<String> call, Throwable t) {
            Toast.makeText(getApplication(), "Something went wrong please try again", Toast.LENGTH_SHORT).show();

        }
    });

}

我使用了内置调试器,应用程序在此行崩溃

Token token=g1.fromJson(data,Token.class);

【问题讨论】:

标签: java android pojo jsonschema2pojo


【解决方案1】:
User user = g.fromJson(data, User.class);

// Try this to get the token of a particular user.
// I think this may be the cause of the error.
Token token = user.getToken();

String tokenNo = token.getToken();      

【讨论】:

    【解决方案2】:

    您正在尝试使用 2 个不同的对象来解析响应,但响应已经被解析。如果您调试 User 对象,则它已经包含其中的 Token 对象。这一行就够了:

    User user = g.fromJson(data, User.class);

    发生崩溃的原因是您尝试将用户 JSON 对象(您的 data 对象)解析为 Token 对象。所以只需删除这一行:

    Token token=g1.fromJson(data,Token.class);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-07
      • 1970-01-01
      • 1970-01-01
      • 2013-07-08
      • 1970-01-01
      • 1970-01-01
      • 2016-05-09
      • 2015-11-21
      相关资源
      最近更新 更多