Я пытаюсь получить данные из API, включая Authorization
с модификацией2. API работает правильно с postman
и Authorization
правильно.
Я передаю авторизацию в @header
.
Вот маршрут, который я пытаюсь вызвать, как реализованов моей службе запросов:
@GET("wc-api/v3/products")
Single<ProductModel> getProduct(@Header("Authorization") String Authorization, @Query("page") int page);
С этими аутентифицированными заголовками, кажется, все работает нормально, пока я не получу конкретный запрос, тогда я получу ошибку 401:
Response{protocol=http/1.1, code=401, message=Unauthorized, url=https://*******.com/wc-api/v3/products?page=1}
Мой модифицированный клиент:
OkHttpClient httpClient =
new OkHttpClient.Builder()
.connectTimeout(10, TimeUnit.SECONDS)
.writeTimeout(10, TimeUnit.SECONDS)
.readTimeout(10, TimeUnit.SECONDS)
.build();
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(App.getInstance().getAddress())
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.client(httpClient)
.build();
apiService = retrofit.create(ApiService.class);
Затем в упражнении я получаю эту ошибку 401, вот как я реализую ее вызов: (Используйте Rxjava
)
dataSource.getProduct(Credentials.basic("ck_*********************",
"cs_***************************"), 1)
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new SingleObserver<ProductModel>() {
@Override
public void onSubscribe(Disposable d) {
compositeDisposable.add(d);
}
@Override
public void onSuccess(ProductModel productModel) {
if (productModel.getProducts() != null)
setModel(productModel.getProducts());
else
Toast.makeText(context, context.getResources().getString(R.string.dialog_ReceiveError), Toast.LENGTH_SHORT).show();
}
@Override
public void onError(Throwable e) {
setModel(new ArrayList<>());
Toast.makeText(context, context.getResources().getString(R.string.dialog_serverError), Toast.LENGTH_SHORT).show();
}
});
Вотснимок профайлера проекта Android Studio:
Вот снимок postman
:
Редактировать:
public class ProductModel {
@SerializedName("products")
@Expose
private List<Products> products;
@SerializedName("errors")
@Expose
private ErrorShopModel errors;
}
public List<Products> getProducts() {
return products;
}
productModel:
public class Products {
@SerializedName("id")
@Expose
private int id;
@SerializedName("title")
@Expose
private String title;
@SerializedName("description")
@Expose
private String description;
@SerializedName("images")
@Expose
private List<ImagesModel> images;
,.....
Getter & Setter
}