3

I should send Token in Header to server, for android requests I use Retrofit.
I use code for Get header token and I can see token :

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

But I should Post this token in header to server, for POST data to server I use this code :

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

How can I send token (String token = response.headers().get("Token")) to server this above POST code?

Please help me, i'm amateur.

  • 1
    See this Link.Hope it helps. http://stackoverflow.com/questions/29884967/how-to-dynamically-set-headers-in-retrofit-android – Rims May 11 '17 at 06:25

2 Answers2

8

Try this code :

private String sendToken;

replace this code with you code :

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

and replace this code :

@POST("usersInfo/Authenticate")
Call<LoginResponse> getLoginResponse(@Header("Token") String token, @Body LoginDatum loginDatum);
Mohammad Nouri
  • 2,245
  • 4
  • 17
  • 34
3

Use @Header annotation. For your case, it would be like this.

  @POST("usersInfo/Authenticate")
  Call<LoginResponse> getLoginResponse(
      @Header("Token") String token,
      @Body LoginDatum loginDatum
  );
Ye Lin Aung
  • 11,234
  • 8
  • 45
  • 51