使用Android上的Retrofit以分页方式调用API

时间:2017-08-24 02:52:41

标签: android api retrofit

我正在我的Android应用中为我的API中的调用实现改造。 我在API中调用了很多结果,然后我决定在API中创建一个分页。 我的通话API返回如下:

{
    "meta": {
        "server": "localhost",
        "offset": "1",
        "limit": "1",
        "recordCount": 1
    },
    "records": [
        {
            "userName": "ricardo"
        }
    ]
}

Call<BaseResponse<User>> user = userResource.getListUser(
                authController.getTokenHeader(),
                limit,
                offset
                );

        user.enqueue(new Callback<BaseResponse<User>>() {
            @Override
            public void onResponse(Response<BaseResponse<User>> response, Retrofit retrofit) {
                if (response.isSuccess()) {
                    New Call Api Again if more results
            }

            @Override
            public void onFailure(Throwable t) {}
       });

当我将通话中的“偏移”更改为“步骤”到下一页时。

是否有任何改装方法为我做这个逻辑? 如果没有,我怎么能实现这个逻辑?

while (callApi){
            UserResource userResource = getRetrofit().create(UserResource.class);
            Call<BaseResponse<User>> user = userResource.getListUsers(
                    authController.getTokenHeader(),
                    ids,
                    cdCode,
                    limit,
                    offset
            );

            user.enqueue(new Callback<BaseResponse<User>>() {
                @Override
                public void onResponse(Response<BaseResponse<User>> response, Retrofit retrofit) {
                    if (response.isSuccess()) {

                        offset = offset+offset;

                            callInvoice = false;
                    }
                }

                @Override
                public void onFailure(Throwable t) {
                }
            });
        }

1 个答案:

答案 0 :(得分:0)

api 中创建分页。根据页面调用,当您的列表视图滚动时,如果没有服务正在呼叫,则调用该页面。

mOrdersView.addOnScrollListener(new RecyclerView.OnScrollListener() {
            @Override
            public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
                super.onScrollStateChanged(recyclerView, newState);
            }

            @Override
            public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
                super.onScrolled(recyclerView, dx, dy);
                int visibleItemCount = layoutManager.getChildCount();
                int totalItemCount = layoutManager.getItemCount();
                int firstVisibleItemPosition = layoutManager.findFirstVisibleItemPosition();

                if (!isLoading && !isLastPage) {
                    if (visibleItemCount + firstVisibleItemPosition >= totalItemCount
                            && firstVisibleItemPosition >= 0
                            && totalItemCount >= CommonUtils.pageLimit) {
                        getNextPage();
                    }
                }
            }
        });

您可以像这样实现滚动侦听器