2016-04-26 50 views
1

我需要授權頭添加到我的要求,必須是這樣的:如何在我的請求頭添加授權?

"Authorization: Basic Zm9vOmJhcg==" 

我有我的用戶名和密碼的值,我怎麼能添加這在Retrofit 2要求?這看起來很簡單,但我不知道我可以在我的片段中初始化此標頭?

我的片段類:

public class FeedFragment extends Fragment { 
    EditText username; 
    EditText password; 
    Button btnLogin; 

    public List<SignInResult> signInResult; 
    String username_value,password_value; 
    public static final String ROOT_URL = "https://api.vid.me/"; 

    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     View rootView = inflater.inflate(R.layout.fragment_feed, container, false); 
     username = (EditText) rootView.findViewById(R.id.user_name_field); 
     password = (EditText) rootView.findViewById(R.id.password_field); 
     btnLogin = (Button) rootView.findViewById(R.id.button_login); 
     btnLogin.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Authorize(); 
      } 
     }); 
     return rootView; 
    } 

    public void Authorize() { 
     Retrofit retrofitAdapter = new Retrofit.Builder() 
       .addConverterFactory(GsonConverterFactory.create()) 
       .baseUrl(ROOT_URL) 
       .build(); 
     final VideoApi videoApi = retrofitAdapter.create(VideoApi.class); 

     username_value = username.getText().toString(); 
     password_value = password.getText().toString(); 

     Call<SignInResults> call = videoApi.insertUser(username_value,password_value); 
     call.enqueue(new Callback<SignInResults>() { 


      @Override 
      public void onResponse(Call<SignInResults> call, Response<SignInResults> response) { 
       SignInResults results = response.body(); 
       Log.d("Response ==>> ", new GsonBuilder().setPrettyPrinting().create().toJson(results)); 

      } 

      @Override 
      public void onFailure(Call<SignInResults> call, Throwable t) { 

      } 
     }); 
    } 
} 

我的API接口:

public interface VideoApi { 

    @GET("/videos/featured") 
    Call<Videos> getFeaturedVideo(); 

    @GET("/videos/new") 
    Call<Videos> getNewVideo(); 

@Headers("Content-Type:application/x-www-form-urlencoded") 
    @FormUrlEncoded 
    @POST("/auth/create") 
    Call<SignInResults>insertUser(@Field("email") String username, 
     @Field("password") String password 
    ); 
} 

回答

1

兩種方法可以做到這一點取決於用例。

第一種方式:使用okhttp客戶

final String myToken = "Zm9vOmJhcg=="; 
Interceptor interceptor = new Interceptor() { 
    @Override 
    public okhttp3.Response intercept(Chain chain) throws IOException { 
    Request newRequest = chain.request().newBuilder() 
     .addHeader("Authorization", "Basic " + yourtoken).build(); 
    return chain.proceed(newRequest); 
    } 
}; 

OkHttpClient.Builder builder = new OkHttpClient.Builder(); 
builder.interceptors().add(interceptor); 
OkHttpClient client = builder.build(); 

現在改變您的通話改造添加攔截您的請求。

Retrofit retrofitAdapter = new Retrofit.Builder() 
    .addConverterFactory(GsonConverterFactory.create()) 
    .baseUrl(ROOT_URL) 
    .client(client) 
    .build(); 

方式二:添加標題到您的API調用

Call<SignInResults>insertUser(
     @Header("Authorization") String token, 
     @Field("email") String username, 
     @Field("password") String password 
    );