首页 > 解决方案 > 带改造 2 的 Logut

问题描述

我正在尝试为我的应用程序实现注销,但我很困惑。我在邮递员的回复是这样的: 在此处输入图像描述

我做了这样的事情:

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);
    }

最后我将销毁令牌,但为成功提供空值。

我的猎犬:

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;
    }

}

标签: androidretrofit2

解决方案


最后我将销毁令牌,但为成功提供空值。

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

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()

推荐阅读