Android Java wywołania retrofita przekazują poprawne parametry w trybie debugowania, a dla signed app nie

0

Nie mam pojęcia jaki jest związek pomiędzy tymi dwoma wariantami jeśli chodzi o wysyłania żądań POST, ale widać coś jest na rzeczy.

Oto moja User class:

public class User {

    String name, pass, email;
    int level, exp, gold;
    Timestamp regDate, lastVisited;
    boolean loginStatus;

    public String getPass() {
        return pass;
    }

    public void setPass(String pass) {
        this.pass = pass;
    }

    public String getEmail() {
        return email;
    }

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

    public boolean getLoginStatus() {
        return loginStatus;
    }

    public void setLoginStatus(boolean loginStatus) {
        this.loginStatus = loginStatus;
    }

    public Timestamp getLastVisited() {
        return lastVisited;
    }

    public void setLastVisited(Timestamp lastVisited) {
        this.lastVisited = lastVisited;
    }

    public Timestamp getRegDate() {
        return regDate;
    }

    public void setRegDate(Timestamp regDate) {
        this.regDate = regDate;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getLevel() {
        return level;
    }

    public void setLevel(int level) {
        this.level = level;
    }

    public int getExp() {
        return exp;
    }

    public void setExp(int exp) {
        this.exp = exp;
    }

    public int getGold() {
        return gold;
    }

    public void setGold(int gold) {
        this.gold = gold;
    }

    public User(String name, String pass) {
        this.name = name;
        this.pass = pass;
    }

    public User(String name, String pass, String email) {
        this.name = name;
        this.pass = pass;
        this.email = email;
    }

    public User(String name, boolean loginStatus, int level, int exp, int gold, Timestamp regDate, Timestamp lastVisited) {
        this.name = name;
        this.loginStatus = loginStatus;
        this.level = level;
        this.exp = exp;
        this.gold = gold;
        this.regDate = regDate;
        this.lastVisited = lastVisited;
    }
}

Mam takie żądanie retrofitowe:

@POST("/login")
Call<String> checkLogin(@Body User user);

i takie wywołanie retrofitowe:

@Override
public void checkLogin(final OnFinishedLoginListener onFinishedListener, String login, String passWhenLogin, List<String> usersLoggedOnCredential) {

Call<String> result = Api.getClient().checkLogin(new User(login, passWhenLogin));
result.enqueue(new Callback<String>() {
    @Override
    public void onResponse(Call<String> call, Response<String> response) {
        onFinishedListener.onFinishedLogin(response.body());
        usersLoggedOnCredential.add(login);
    }

    @Override
    public void onFailure(Call<String> call, Throwable t) {
        Log.e("checkLogin", t.toString());
        onFinishedListener.onFailureLogin(t);
    }
});

i kod serwera:

@PostMapping("/login")
public String login(@RequestBody UserForCreateDto userForCreateDto) throws SQLException {  
    return usersDao.userExists(userForCreateDto.getName(), userForCreateDto.getPass(), conn);
}

oraz

public String userExists(String name, String pass, Connection connection) {
String passEncoded = "";
String result;

System.out.println("qqqqqqq " + name + " " + pass);

PasswordEncoder encoder = new BCryptPasswordEncoder();

PreparedStatement ps;
try {
    ps = connection.prepareStatement("select * from users where username='" + name + "'");
    ResultSet rs = ps.executeQuery();
    if (rs.next())
        passEncoded = rs.getString(3);
    if (encoder.matches(pass, passEncoded))
        result = "true";
    else
        result = "false";
} catch (Exception e) {
    System.out.println("aaaaaaaaaab");
    e.printStackTrace();
    return e.getMessage();
}
return result;

oraz model usera z serwera :

@Data
public class UserForCreateDto {

    private String name;
    private String pass;
    private String email;
    private int level;
    private int exp;
    private int gold;
}

W trybie debugowania otrzymuję odpowiednio true or false w zależności od przekazanych danych logowania, ale kiedy podpiszę swoją aplikację aby była gotowa do Google Play moje pole pass wydaje się nie dochodzić do serwera i otrzymuję wtedy pass == null (pole name jest poprawne).

Czemu tak się dzieje?

1

Naprawione poprzez dodanie adnotacji do klasy modelu

@SerializedName("pass")

oraz przeróbki

-keep class ...

w proguard-rules.pro. Pozdr

1 użytkowników online, w tym zalogowanych: 0, gości: 1