response.body (). getBasketShopList пуст, но API JSON в Postman не пуст - PullRequest
0 голосов
/ 05 марта 2019

Я новичок в 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 Ответ

1 голос
/ 06 марта 2019

Через неделю я нашел решение, я просто изменил переменную «число с плавающей запятой» на «Число строк» ​​из моей операции Model (BasketShop Class)!

@SerializedName("count")
private String count;
...