response.body()。getBasketShopList为空,但Postman中的API JSON不为空

时间:2019-03-05 17:34:11

标签: java android retrofit postman

我是Android的新手,大约一周的时间,我每天要花3个小时来解决这个问题,但仍然找不到解决方案,我将从服务器中获取对象列表并将它们传递给Adapter和另一个过程。但是我遇到了麻烦,没有错误,在我的Android Studio中,我得到了“ response.code = 200”,但是我的对象列表为空,尽管在具有相同授权和相同用户名的Postman中,对象列表并不为空。我不知道该怎么办,所以最后我不得不问我的问题。

首先让我们看看邮递员

身体::
Body :

授权::
Authorization :

现在,当我在邮递员中单击“发送”按钮时,我收到“代码:200”,并且听到的是响应正文:

{
    "results": [
        {
            "_id": "5c7e69d283c0b00001108fad",
            "count": 2,
            "productId": "5ba51d877246b700016ec205",
            "username": "rezash",
            "createdAt": "2019-03-05T12:21:38.196UTC",
            "updatedAt": "2019-03-05T12:36:11.058UTC",
            "ACL": {
                "*": {
                    "read": true,
                    "write": true
                }
            }
        },
        {
            "_id": "5c7e69d483c0b00001108fae",
            "count": 4,
            "productId": "5acc0f2c790c0c000132c984",
            "username": "rezash",
            "createdAt": "2019-03-05T12:21:40.338UTC",
            "updatedAt": "2019-03-05T12:36:15.830UTC",
            "ACL": {
                "*": {
                    "read": true,
                    "write": true
                }
            }
        }
    ]
}

在我的OnlineShopAPI界面中:

public interface OnlineShopAPI {

    String BASE_URL = "https://api.backtory.com/";

    @Headers("X-Backtory-Object-Storage-Id:5a154d2fe4b03ffa0436a535")
    @HTTP(method = "POST" , path = "object-storage/classes/query/Basket" , hasBody = true)
    Call<MainBasketShopResponse> mainBasketShop (
            @Header("Authorization") String authorization,
            @Body BasketShop basketShop
    );

    interface getMainBasketShop {

        void onResponse(List<BasketShop> basketShopList);

        void onFailure(String cause);
    }
}

我的MainBasketShopResponse类:

public class MainBasketShopResponse {

    @SerializedName("results")
    List<BasketShop> basketShopList;

    public MainBasketShopResponse() {
    }


    public List<BasketShop> getBasketShopList() {
        return basketShopList;
    }

    public void setBasketShopList(List<BasketShop> basketShopList) {
        this.basketShopList = basketShopList;
    }
}

BasketShop类:

public class BasketShop {

    @SerializedName("username")
    private String username;

    @SerializedName("productId")
    private String productId;

    @SerializedName("count")
    private float count;


    @SerializedName("createdAt")
    private String createdAt;


    @SerializedName("_id")
    private String id;

    public String getCreatedAt() {
        return createdAt;
    }

    public void setCreatedAt(String createdAt) {
        this.createdAt = createdAt;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public BasketShop(String username) {
        this.username = username;
    }

    public BasketShop() {
    }

    public BasketShop(String username, String productId, float count) {
        this.username = username;
        this.productId = productId;
        this.count = count;
    }

    public BasketShop(String createdAt, String id) {
        this.createdAt = createdAt;
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getProductId() {
        return productId;
    }

    public void setProductId(String productId) {
        this.productId = productId;
    }

    public float getCount() {
        return count;
    }

    public void setCount(float count) {
        this.count = count;
    }

}

包含改造的我的控制器:

public class MainBasketShopController {

    OnlineShopAPI.getMainBasketShop getMainBasketShop;

    public MainBasketShopController(OnlineShopAPI.getMainBasketShop getMainBasketShop) {
        this.getMainBasketShop = getMainBasketShop;
    }

    public void start(String authorization , BasketShop basketShop){

        Retrofit retrofit = new Retrofit.Builder()
                .addConverterFactory(GsonConverterFactory.create())
                .baseUrl(OnlineShopAPI.BASE_URL)
                .build();

        OnlineShopAPI onlineShopAPI = retrofit.create(OnlineShopAPI.class);
        Call<MainBasketShopResponse> call = onlineShopAPI.mainBasketShop(authorization , basketShop);
        call.enqueue(new Callback<MainBasketShopResponse>() {
            @Override
            public void onResponse(Call<MainBasketShopResponse> call, Response<MainBasketShopResponse> response) {

                if (response.isSuccessful()) {


                    Log.d("emptyhst1" , response.body().getBasketShopList().toString());
                    Log.d("emptyhst2" , Integer.toString(response.body().getBasketShopList().size()));
                    getMainBasketShop.onResponse(response.body().getBasketShopList());

                }
            }

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

                getMainBasketShop.onFailure(t.getMessage());

            }
        });
    }
}

听力是我的BasketShopFragment的一部分,我将其称为MainBasketShopController:

MainBasketShopController mainBasketShopController = new MainBasketShopController(getMainBasketShop);
    BasketShop basketShop = new BasketShop();
    basketShop.setUsername(MyPreferenceManager.getInstance(getContext()).getUsername());
    mainBasketShopController.start(
            "bearer " + MyPreferenceManager.getInstance(getContext()).getAccessToken() ,
            basketShop
    );

OnlineShopAPI.getMainBasketShop getMainBasketShop = new OnlineShopAPI.getMainBasketShop() {
    @Override
    public void onResponse(List<BasketShop> basketShopList) {

        Log.d("emptyhst3" , basketShopList.toString());

        basketShopList2.clear();
        basketShopList2.addAll(basketShopList);
        mainBasketShopAdapter.notifyDataSetChanged();

    }

    @Override
    public void onFailure(String cause) {

        Toast.makeText(getContext(), cause , Toast.LENGTH_SHORT).show();

    }
};

我检查了我传递给控制器​​的用户名和accessToken,并确定一切看起来都与邮递员类似

1 个答案:

答案 0 :(得分:1)

一个星期后,我找到了一个解决方案,我只是将Model(BasketShop Class)Ops的变量“ float count”更改为“ String count”!

@SerializedName("count")
private String count;