#android #retrofit #retrofit2 #github-api
Вопрос:
Я пытаюсь создать приложение, в котором будут перечислены все публичные/частные репозитории github для пользователя через API REST github.
Вот GithubService для модернизации.
public interface GithubService {
@GET("user")
Call<User> getUser(@Header("Authorization") String authHeader);
@GET("users/{user}/repos")
Call<List<GitHubRepo>> userRepos(@Header("Authorization") String authHeader, @Path("user") String userId);}
У меня есть форма входа в систему, которая принимает имя пользователя и личный токен доступа пользователя в качестве пароля, и вот код, который я использую для запроса информации о пользователе, это возвращает действительную информацию о пользователе:
OkHttpClient.Builder clientBuilder = new OkHttpClient.Builder()
.addInterceptor(new HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BODY));
Retrofit.Builder builder = new Retrofit.Builder()
.baseUrl("https://api.github.com")
.client(clientBuilder.build())
.addConverterFactory(GsonConverterFactory.create());
Retrofit retrofit = builder.build();
GithubService service = retrofit.create(GithubService.class);
String cred = Credentials.basic(username, password);
service.getUser(cred).enqueue(new Callback<User>() {
@Override
public void onResponse(Call<User> call, Response<User> response) {
Log.d(TAG, "onResponse: " response.isSuccessful());
fetchRepos(password, response.body());
}
@Override
public void onFailure(Call<User> call, Throwable t) {
Log.d(TAG, "onFailure: " t.getMessage());
}
});
в fetchRepos я пытаюсь использовать маркер личного доступа в качестве заголовка аутентификации для запроса пользовательских репозиториев, но он возвращает значение null, вот код:
private void fetchRepos(String pat, User user) {
OkHttpClient.Builder clientBuilder = new OkHttpClient.Builder()
.addInterceptor(new HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BODY));
Retrofit.Builder builder = new Retrofit.Builder()
.baseUrl("https://api.github.com")
.client(clientBuilder.build())
.addConverterFactory(GsonConverterFactory.create());
Retrofit retrofit = builder.build();
GithubService service = retrofit.create(GithubService.class);
service.userRepos(pat, user.getLogin()).enqueue(new Callback<List<GitHubRepo>>() {
@Override
public void onResponse(Call<List<GitHubRepo>> call, Response<List<GitHubRepo>> response) {
Log.d(TAG, "onResponse: " response.isSuccessful());
}
@Override
public void onFailure(Call<List<GitHubRepo>> call, Throwable t) {
}
});
}
Где я здесь ошибаюсь? Как продолжить авторизацию для запроса пользовательских репозиториев и как Двухфакторный код интегрирован в авторизацию?