Sim, você pode passá-los em tempo de execução. Na verdade, exatamente como você digitou. Isso estaria em sua classe de interface da API, chamada, digamos, SecretApiInterface.java
public interface SecretApiInterface {
@GET("/secret_things")
SecretThing.List getSecretThings(@Header("Authorization") String token)
}
Em seguida, você passa os parâmetros de sua solicitação para essa interface, algo nesse sentido: (este arquivo seria, por exemplo, SecretThingRequest.java )
public class SecretThingRequest extends RetrofitSpiceRequest<SecretThing.List, SecretApiInteface>{
private String token;
public SecretThingRequest(String token) {
super(SecretThing.List.class, SecretApiInterface.class);
this.token = token;
}
@Override
public SecretThing.List loadDataFromNetwork() {
SecretApiInterface service = getService();
return service.getSecretThings(Somehow.Magically.getToken());
}
}
Onde Somehow.Magically.getToken()
está uma chamada de método que retorna um token, cabe a você onde e como defini-lo.
É claro que você pode ter mais de uma @Header("Blah") String blah
anotação na implementação da interface, como no seu caso!
Também achei confuso, a documentação diz claramente que substitui o cabeçalho, mas NÃO !
Na verdade, é adicionado como uma @Headers("hardcoded_string_of_liited_use")
anotação
Espero que isto ajude ;)