android - 带改造 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;
}
}
解决方案
最后我将销毁令牌,但为成功提供空值。
您正在尝试使用一个空的对象,因为您只是创建了它
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()
推荐阅读
- javascript - JavaScript - 旋转画布图像,角落被剪掉
- drupal - DDEV Drupal:保存为 GZip 时如何使用 backup_migrate 模块恢复备份?
- python-3.x - 尽管 ping 通,Websocket 在约 2 小时后获得连接壁橱
- oracle - mybaties 选择时的类型转换
- html - 使用 URL 作为标签的链接
- angular - Angular5:ngOnInit 只在路由上调用一次
- android - 如何滚动浮动操作菜单的范围
- javascript - MVC Razor 自定义复选框更新“真实”复选框
- git - “开发”似乎不是 git 存储库
- xamarin.forms - 升级到 Mvvmcross 6.0.1 后找不到资源