无法在 call.enque() 中的改造中获得响应
Unable to get Response in retrofit in call.enque()
我正在从 Shopify 中配对 CollectionListing
Api,我需要将 'collecton_listing_id'
作为参数传递给 url
。我正在传递 id 但无法在回调中获得响应。
注意:我已经在 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);
}
型号Class
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
]
}
谢谢。
您需要将 getProductIds
的 return 类型从 Call<List<Integer>>
更改为 Call<IdExample>
编辑:(如评论中所述)
您还应该将 List<Integer> productIds
更改为 List<Long> productIds
尝试使用
调用 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));
}
});
应该是这样的
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);
}
我正在从 Shopify 中配对 CollectionListing
Api,我需要将 'collecton_listing_id'
作为参数传递给 url
。我正在传递 id 但无法在回调中获得响应。
注意:我已经在 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);
}
型号Class
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
]
}
谢谢。
您需要将 getProductIds
的 return 类型从 Call<List<Integer>>
更改为 Call<IdExample>
编辑:(如评论中所述)
您还应该将 List<Integer> productIds
更改为 List<Long> productIds
尝试使用
调用 APImAPIService.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));
}
});
应该是这样的
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);
}