注销与改造 2

Logut with retrofit 2

我正在尝试为我的应用实现注销,但我感到困惑。我在邮递员中的回复是这样的:

我做了这样的事情:

private void logout() {
        UserRetriver logoutUsr = new UserRetriver();
        SharedPreferences editor = getSharedPreferences(MY_PREFERENCE, MODE_PRIVATE);
        String token = editor.getString("token", "");

        Logout log = new Logout();

        Callback<Logout> callback = new Callback<Logout>() {
            @Override
            public void onResponse(Call<Logout> call, Response<Logout> response) {
                if (response.isSuccessful()) {
                    SharedPreferences.Editor editor = getSharedPreferences(MY_PREFERENCE, MODE_PRIVATE).edit();
                    editor.remove("token");
                    editor.clear();
                    editor.apply();
                    String success = log.getSuccess();
                    progressBar.dismiss();
                    System.out.println(success);
                }
            }

            @Override
            public void onFailure(Call<Logout> call, Throwable t) {
                progressBar.dismiss();
                Toast.makeText(MainActivity.this, t.getMessage(), Toast.LENGTH_SHORT).show();
            }
        };
        logoutUsr.logoutUser(callback, log, token);
    }

最后我会销毁token,但成功时会给出null值。

我的猎犬:

public void logoutUser(Callback<Logout> callback, Logout logout, String authorization) {
        Call<Logout> call = service.logout(logout, authorization);
        call.enqueue(callback);
    }

和我的界面:

@POST("logout")
    Call<Logout> logout(@Body Logout logout, @Header("Authorization") String authorization);

和我的模特

public class Logout {

    @SerializedName("success")
    @Expose
    private String success;

    public String getSuccess() {
        return success;
    }

    public void setSuccess(String success) {
        this.success = success;
    }

}

In the end I will destroy token, but is giving null value for success.

您正在尝试使用一个空对象,因为您创建它只是为了

Logout log = new Logout();

但是这个对象是空的,这就是为什么当你这样做时你会看到 null 的原因:

 String success = log.getSuccess();

如何解决?

我看到的是您在方法的任何部分都没有使用响应,只是询问它是否成功

Callback<Logout> callback = new Callback<Logout>() {
            @Override
            public void onResponse(Call<Logout> call, Response<Logout> response) {
                if (response.isSuccessful()) {
                    SharedPreferences.Editor editor = getSharedPreferences(MY_PREFERENCE, MODE_PRIVATE).edit();
                    editor.remove("token");
                    editor.clear();
                    editor.apply();
                    String success = log.getSuccess();
                    progressBar.dismiss();
                    System.out.println(success);
                }
            }

            @Override
            public void onFailure(Call<Logout> call, Throwable t) {
                progressBar.dismiss();
                Toast.makeText(MainActivity.this, t.getMessage(), Toast.LENGTH_SHORT).show();
            }
        };

所以我猜你想做这样的事情:

 String success = response.getBody().getSuccess();

而不是使用 log.getSuccess() 因为你没有做类似的事情:

log = response.getBody()