如何使用 Retrofit 加载更多帖子

问题描述

我正在用 android studio 制作新的和我的第一个应用程序,我是菜鸟,所以不太了解它,我用改造和 wordpress 制作了应用程序,我已经成功显示了前 10 个帖子,但我不知道如何在滚动上加载更多帖子,请帮忙,这是我的主要活动,我已经实现了 EndlessRecyclerOnScrollListener.java 类,但不知道我应该在那里写什么

OnCreate:

 super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    recyclerView = (RecyclerView) findViewById(R.id.recycler_view);
    list = new ArrayList<Model>();
    progressBar = (ProgressBar) findViewById(R.id.progressbar);
    adapter = new RecyclerViewAdapter(list,this);
    mLayoutManager = new linearlayoutmanager(MainActivity.this,linearlayoutmanager.VERTICAL,false);
    recyclerView.setLayoutManager(mLayoutManager);
    getRetrofit();
    recyclerView.setAdapter(adapter);


    scrollListener = new EndlessRecyclerOnScrollListener(mLayoutManager) {
        @Override
        public void onLoadMore(int page,int totalItemsCount,RecyclerView view) {



        }
    };
    // Adds the scroll listener to RecyclerView
    recyclerView.addOnScrollListener(scrollListener);


    recyclerView.post(new Runnable() {
        @Override
        public void run() {
            // Notify adapter with appropriate notify methods

            adapter.notifyItemRangeInserted(curSize,list.size() - 1);
        }
    });

}

这是我的改造:

public void getRetrofit(){
    Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(baseURL)
            .addConverterFactory(GsonConverterFactory.create())
            .build();
    RetrofitArrayApi service = retrofit.create(RetrofitArrayApi.class);
    String yourURl = yourURL.replace(baseURL,"");
    Call<List<WPPost>>  call = service.getPostInfo( yourURl);
    call.enqueue(new Callback<List<WPPost>>() {
        @Override
        public void onResponse(Call<List<WPPost>> call,Response<List<WPPost>> response) {
            Log.e("mainactivyt"," response "+ response.body());
            mListPost = response.body();
            progressBar.setVisibility(View.GONE);
            if (response.body() != null) {


                for (int i = 0; i < response.body().size(); i++ ) {


                    Log.e("size",list.size() + "");


                    System.out.println("The shortest word i is:" + i );




                    Log.e("main "," title " + response.body().get(i).getTitle().getRendered() + " " +
                            response.body().get(i).getId());
                    String tempdetails = response.body().get(i).getExcerpt().getRendered().toString();
                    tempdetails = tempdetails.replace("<p>","");
                    tempdetails = tempdetails.replace("</p>","");
                    tempdetails = tempdetails.replace("[&hellip;]","");
                    list.add(new Model(Model.IMAGE_TYPE,response.body().get(i).getTitle().getRendered(),tempdetails,response.body().get(i).getimages().getMedium()));





                }




                progressBar.setVisibility(View.GONE);
            } else {
                progressBar.setVisibility(View.GONE);
            }


            adapter.notifyDataSetChanged();

        }
        @Override
        public void onFailure(Call<List<WPPost>> call,Throwable t) {
        }
    });
}

改造 API

public interface RetrofitArrayApi {


@GET("android/wp-json/wp/v2/posts")
Call<List<WPPost>> getPostInfo();

@GET("paged/list/endpoint")
static Call<WPPost.PagedList<Object>> getPagedList(@Query("page") int page) {
    return null;
}

在 WPPost.java 中

public class PagedList<T> {

    private int page = 0;
    private List<T> results = new ArrayList<>();
    private int totalResults = 0;
    private int totalPages = 0;

    public int getPage() {
        return page;
    }

    public void setPage(int page) {
        this.page = page;
    }

    public List<T> getResults() {
        return results;
    }
    public void setResults(List<T> results) {
        this.results = results;
    }

    public int getTotalResults() {
        return totalResults;
    }

    public void setTotalResults(int totalResults) {
        this.totalResults = totalResults;
    }

    public int getTotalPages() {
        return totalPages;
    }

    public void setTotalPages(int totalPages) {
        this.totalPages = totalPages;
    }
}

适配器

 private ArrayList<Model> dataset;
private Context mContext;
int total_types;

private List<Object> list;




public RecyclerViewAdapter(ArrayList<Model> mlist,Context context) {
    this.dataset = mlist;
    this.mContext = context;
    total_types = dataset.size();
}

public void setList(List<Object> list) {
    this.list = list;
    notifyDataSetChanged();
}

public void addAll(List<Object> newList) {
    int lastIndex = list.size() - 1;
    list.addAll(newList);
    notifyItemRangeInserted(lastIndex,newList.size());
}

主活动

super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    mIsLoading = false;
    mIsLastPage = false;

    final int pageSize = 20;
    recyclerView = (RecyclerView) findViewById(R.id.recycler_view);
    list = new ArrayList<Model>();
    progressBar = (ProgressBar) findViewById(R.id.progressbar);
    adapter = new RecyclerViewAdapter(list,false);

    recyclerView.setLayoutManager(mLayoutManager);
    list = new ArrayList<Model>();

    Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(baseURL)
            .addConverterFactory(GsonConverterFactory.create())
            .build();
    RetrofitArrayApi service = retrofit.create(RetrofitArrayApi.class);
    Call<List<WPPost>>  call = service.getPostInfo();
    call.enqueue(new Callback<List<WPPost>>() {
                     @Override
                     public void onResponse(Call<List<WPPost>> call,Response<List<WPPost>> response) {
                         Log.e("mainactivyt"," response " + response.body());
                         mListPost = response.body();
                         progressBar.setVisibility(View.GONE);
                         if (response.body() != null) {
                             for (int i = 0; i < response.body().size(); i++) {
                                 Log.e("size",list.size() + "");
                                 System.out.println("The shortest word i is:" + i);
                                 Log.e("main "," title " + response.body().get(i).getTitle().getRendered() + " " +
                                         response.body().get(i).getId());
                                 String tempdetails = response.body().get(i).getExcerpt().getRendered().toString();
                                 tempdetails = tempdetails.replace("<p>","");
                                 tempdetails = tempdetails.replace("</p>","");
                                 tempdetails = tempdetails.replace("[&hellip;]","");
                                 list.add(new Model(Model.IMAGE_TYPE,response.body().get(i).getimages().getMedium()));
                             }
                             progressBar.setVisibility(View.GONE);
                         } else {
                             progressBar.setVisibility(View.GONE);
                         }
                         adapter.notifyDataSetChanged();

                     }

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

                     }

                 });


    recyclerView.addOnScrollListener(new  RecyclerView.OnScrollListener() {
        @Override
        public void onScrolled(RecyclerView recyclerView,int dx,int dy) {
            super.onScrolled(recyclerView,dx,dy);
            // number of visible items
            int visibleItemCount = mLayoutManager.getChildCount();
            // number of items in layout
            int totalItemCount = mLayoutManager.getItemCount();
            // the position of first visible item
            int firstVisibleItemPosition = mLayoutManager.findFirstVisibleItemPosition();

            boolean isNotLoadingAndNotLastPage = !mIsLoading && !mIsLastPage;
            // flag if number of visible items is at the last
            boolean isAtLastItem = firstVisibleItemPosition + visibleItemCount >= totalItemCount;
            // validate non negative values
            boolean isValidFirstItem = firstVisibleItemPosition >= 0;
            // validate total items are more than possible visible items
            boolean totalIsMoreThanVisible = totalItemCount >= pageSize;
            // flag to kNow whether to load more
            boolean shouldLoadMore = isValidFirstItem && isAtLastItem && totalIsMoreThanVisible && isNotLoadingAndNotLastPage;

            if (shouldLoadMore) loadMoreItems(false);
        }
    });

    // load the first page

    loadMoreItems(true);

    adapter = new RecyclerViewAdapter( list,MainActivity.this);
    recyclerView.setAdapter(adapter);


}



private void loadMoreItems(boolean isFirstPage) {
    // change loading state
    mIsLoading = true;
    mCurrentPage = mCurrentPage + 1;

    // update recycler adapter with next page
    RetrofitArrayApi.getPagedList(mCurrentPage).enqueue(new Callback<WPPost.PagedList<Object>>() {
        @Override
        public void onResponse(Call<WPPost.PagedList<Object>> call,Response<WPPost.PagedList<Object>> response) {
            WPPost.PagedList<Object> result = response.body();

            if (result == null) return;
            else if (!isFirstPage) adapter.addAll(result.getResults());
            else adapter.setList(result.getResults());

            mIsLoading = false;
            mIsLastPage = mCurrentPage == result.getTotalPages();
        }

        @Override
        public void onFailure(Call<WPPost.PagedList<Object>> call,Throwable t) {
            Log.e("SomeActivity",t.getMessage());
        }
    });
}

过去一周我已经搜索了很多,但仍然无法正常工作,请帮助....

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...