Невозможно получить ответ в модификации в call.enque () - PullRequest
0 голосов
/ 09 мая 2018

Я очищаюсь CollectionListing API от Shopify, и мне нужно передать 'collecton_listing_id' в качестве параметра в url. Я передаю идентификатор, но не могу получить ответ в Callback.

Примечание: Я проверил API с параметрами в Почтальоне и работает нормально.

Вот моя реализация.

ProductActivity.java

 private void processProductIds() {

    apiInterface = APIClient.getClient().create(ApiInterface.class);

    Call<List<Integer>> call = apiInterface.getProductIds(key, id);

    call.enqueue(new Callback<List<Integer>>() {
        @Override
        public void onResponse(Call<List<Integer>> call, Response<List<Integer>> response) {
            String s = String.valueOf(response.body());
            Log.d("S", "onResponse:" + s);
        }

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

        }
    });
}

ApiInterface.java

public interface ApiInterface {

@GET("collection_listings/{collection_listing_id}/product_ids.json")
Call<List<Integer>> getProductIds(@Header("Authorization") String accessToken, @Path("collection_listing_id") long id);

}

Модель класса

public class IdExample {

@SerializedName("product_ids")
@Expose
private List<Integer> productIds = null;

public List<Integer> getProductIds() {
    return productIds;
}

public void setProductIds(List<Integer> productIds) {
    this.productIds = productIds;
 }
}

JSON Response

{
"product_ids": [
    1331092619350,
    1331125551190,
    1331126599766,
    1331121651798
  ]
}

Спасибо.

Ответы [ 3 ]

0 голосов
/ 09 мая 2018

Попробуйте вызвать API с помощью,

mAPIService.functionpost("url/"+id).enqueue(new Callback<List<IdExample>>() {
        @Override
        public void onResponse(Call<List<IdExample>> call, Response<List<IdExample>> response) {
            if (response.isSuccessful()) {
                if (constantsVariables.debug) {
                    Log.i(constantsVariables.TAG, "/****************************/" + response.raw());

                }                 
        }

        @Override
        public void onFailure(@NonNull Call<List<IdExample>> call, @NonNull Throwable tr) {
            Log.d("TEST  Inside fail if", Log.getStackTraceString(tr));
        }
    });
0 голосов
/ 09 мая 2018

Так и должно быть

private void processProductIds() {

apiInterface = APIClient.getClient().create(ApiInterface.class);

Call<IdExample> call = apiInterface.getProductIds(key, id);

call.enqueue(new Callback<IdExample>() {
    @Override
    public void onResponse(Call<IdExample> call, Response<IdExample> response) {
        String s = String.valueOf(response.body().getProductIds());
        Log.d("S", "onResponse:" + s);
    }

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

    }
});
}

Затем измените интерфейс API следующим образом

public interface ApiInterface {
@GET("collection_listings/{collection_listing_id}/product_ids.json")
Call<IdExample> getProductIds(@Header("Authorization") String 
accessToken, @Path("collection_listing_id") long id);
}
0 голосов
/ 09 мая 2018

Вам необходимо изменить тип возврата getProductIds с Call<List<Integer>> на Call<IdExample>

РЕДАКТИРОВАТЬ: (как обсуждалось в комментариях)

Вы также должны изменить List<Integer> productIds на List<Long> productIds

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...