注销与改造 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()
我正在尝试为我的应用实现注销,但我感到困惑。我在邮递员中的回复是这样的:
我做了这样的事情:
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()