【发布时间】:2017-09-19 06:21:09
【问题描述】:
在我的应用程序中,我想创建一个登录/注册页面。
在登录页面中,我将用户名、密码、令牌从客户端发送到服务器。
我应该从USER获取Username和Password,并从Request的HEADER获取Token。
为了将客户端连接到服务器,我使用 Retorfit 2.2.0 库。
接口类的代码:
@POST("User/Authenticate")
Call<LoginResponse> getLoginResponse(@Header("Token") String token, @Body LoginDatum loginDatum);
Activity 中的代码:
public void getLogin(String username, String password) {
final LoginDatum loginDatum = new LoginDatum();
loginDatum.setUsername(username);
loginDatum.setPassword(password);
InterfaceApi api = ApiClient.getClient().create(InterfaceApi.class);
Call<LoginResponse> call = api.getLoginResponse(sendToken, loginDatum);
Log.e("tokenTAG", "Token : " + sendToken);
call.enqueue(new Callback<LoginResponse>() {
@Override
public void onResponse(Call<LoginResponse> call, Response<LoginResponse> response) {
LoginResponse loginResponse = response.body();
String token = response.headers().get("Token");
if (token != null) {
sendToken = token;
Log.e("tokenTAG", "Token : " + sendToken);
}
if (loginResponse.getStatusCode() == 200) {
Toasty.success(context, context.getResources().getString(R.string.welcome) + " " +
loginResponse.getData().getName(), Toast.LENGTH_LONG, true).show();
} else {
Toasty.error(context, loginResponse.getStatusMessage() + "", Toast.LENGTH_LONG, true).show();
}
loadProgress.get(0).setVisibility(View.GONE);
loginBtn.setVisibility(View.VISIBLE);
btnShadow.setVisibility(View.VISIBLE);
}
@Override
public void onFailure(Call<LoginResponse> call, Throwable t) {
loadProgress.get(0).setVisibility(View.GONE);
loginBtn.setVisibility(View.VISIBLE);
btnShadow.setVisibility(View.VISIBLE);
Toasty.error(context, context.getResources().getString(R.string.failRequest),
Toast.LENGTH_LONG, true).show();
}
});
}
然后在 LogCat 中给我看这个:
tokenTAG: Token : null
tokenTAG: Token : MKGKFPOVRMU4MRK0STNDO20RA2MPEWT7Y1N2WUM5QLIXJX2TEOM9APGUTYJMD8R42WFVESD8GRXCTCINA2LZKU7JV2I7KA2R4N5W
但是当我想用这个代码发送令牌时:Call<LoginResponse> call = api.getLoginResponse(sendToken, loginDatum); 它显示我 null。
我已经使用这行:Call<LoginResponse> call = api.getLoginResponse(sendToken, loginDatum); 来生成请求回调,虽然这行 Token 不是 NUll。
我该如何解决?
【问题讨论】:
-
你可以用断点调试它来检查值是空还是非
-
你在哪里初始化了 sendToken 变量。在行:Call
call = api.getLoginResponse(sendToken, loginDatum);你的 sendToken 为空。
标签: android retrofit retrofit2