如何使用Android中的Retrofit在标头请求中发送TOKEN

时间:2017-05-11 06:17:40

标签: android json retrofit2

我应该将标题中的令牌发送到服务器,对于我使用Retrofit的Android请求。 我使用Get头令牌代码,我可以看到令牌:

 InterfaceApi api = ApiClient.getClient().create(InterfaceApi.class);
        Call<LoginResponse> call = api.getLoginResponse(loginDatum);

        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) {
                    Log.e("tokenTAG", "Token : " + token);
                }
                Toast.makeText(context, loginResponse.getStatusMessage() + "", Toast.LENGTH_SHORT).show();

                loadProgress.setVisibility(View.GONE);
                loginBtn.setVisibility(View.VISIBLE);
            }

            @Override
            public void onFailure(Call<LoginResponse> call, Throwable t) {
                loadProgress.setVisibility(View.GONE);
                loginBtn.setVisibility(View.VISIBLE);
            }
        });
                    } 

但是我应该在标题中将此标记发布到服务器,对于POST数据到服务器我使用此代码:

@POST("usersInfo/Authenticate")
Call<LoginResponse> getLoginResponse(@Body LoginDatum loginDatum);

如何将令牌 String token = response.headers().get("Token") 发送到服务器上面的POST代码?

请帮帮我,我是业余爱好者。

2 个答案:

答案 0 :(得分:6)

试试这段代码:

private String sendToken;

用您的代码替换此代码:

    InterfaceApi api = ApiClient.getClient().create(InterfaceApi.class);
    Call<LoginResponse> call = api.getLoginResponse(sendToken, loginDatum);

    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) {
                Log.e("tokenTAG", "Token : " + token);
                sendToken = token;
            }
            Toast.makeText(context, loginResponse.getStatusMessage() + "", Toast.LENGTH_SHORT).show();

            loadProgress.setVisibility(View.GONE);
            loginBtn.setVisibility(View.VISIBLE);
        }

        @Override
        public void onFailure(Call<LoginResponse> call, Throwable t) {
            loadProgress.setVisibility(View.GONE);
            loginBtn.setVisibility(View.VISIBLE);
        }
    });
}

并替换此代码:

@POST("usersInfo/Authenticate")
Call<LoginResponse> getLoginResponse(@Header("Token") String token, @Body LoginDatum loginDatum);

答案 1 :(得分:2)

使用@Header注释。对于你的情况,它会是这样的。

  @POST("usersInfo/Authenticate")
  Call<LoginResponse> getLoginResponse(
      @Header("Token") String token,
      @Body LoginDatum loginDatum
  );