无法在call.enque()中进行改造时获得响应

时间:2018-05-09 11:41:56

标签: android android-studio retrofit retrofit2 shopify-app

我正在从Shopify中削减CollectionListing Api,我需要在'collecton_listing_id'中传递url作为参数。我正在传递id,但无法在Callback中得到响应。

注意:我在Postman中使用参数测试了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响应

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

谢谢。

2 个答案:

答案 0 :(得分:2)

您需要将getProductIds的返回类型从Call<List<Integer>>更改为Call<IdExample>

编辑:(如评论中所述)

您还应将List<Integer> productIds更改为List<Long> productIds

答案 1 :(得分:0)

应该是这样的

+ (void)setFlashMode:(AVCaptureFlashMode)flashMode forDevice:(AVCaptureDevice *)device
{

    if ([device hasFlash] && [device isFlashModeSupported:flashMode])
        {
        NSError *error = nil;
        if ([device lockForConfiguration:&error])
        {
            [device setFlashMode:flashMode];
            [device unlockForConfiguration];
        }
        else
        {
            NSLog(@"%@", error);
        }
    }
}

然后像这样改变api界面

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) {

    }
});
}