RecyclerView无限滚动与排球

时间:2017-03-17 23:23:16

标签: php android mysql android-recyclerview

我正在尝试创建Infinite Scroll RecyclerView。我正在使用PHP和MySQL。每当RecyclerView到达底部时,在我的PHP脚本请求中有2个项目。

$query = "SELECT * FROM beichten WHERE id BETWEEN ($id+1) AND ($id+2)";

可以用Volley做到这一点吗?

我创建了一个Class,每当RecyclerView到达底部时触发我的请求类。

private boolean isLastItemDisplaying(RecyclerView recyclerView) {
        if (recyclerView.getAdapter().getItemCount() != 0) {
            int lastVisibleItemPosition = ((LinearLayoutManager) recyclerView.getLayoutManager()).findLastCompletelyVisibleItemPosition();
            if (lastVisibleItemPosition != RecyclerView.NO_POSITION && lastVisibleItemPosition == recyclerView.getAdapter().getItemCount() - 1){
                Toast.makeText(Menue.this, "BOTTOM", Toast.LENGTH_SHORT).show();


                requestJsonObject();
            }
        }
        return false;
    }

它可以工作,但RecyclerView再次加载,只显示2个新加载的对象。

private void requestJsonObject() {

        RequestQueue queue = Volley.newRequestQueue(this);
        StringRequest stringRequest = new StringRequest(Request.Method.POST, getbeichtenphp, new Response.Listener<String>() {
            @TargetApi(Build.VERSION_CODES.M)
            @Override
            public void onResponse(String response) {
                GsonBuilder builder = new GsonBuilder();
                Gson mGson = builder.create();
                List<ItemObject> posts = new ArrayList<ItemObject>();
                posts = Arrays.asList(mGson.fromJson(response, ItemObject[].class));
                adapter = new RecyclerViewAdapter(Menue.this, posts);
                recyclerView.setAdapter(adapter);
                progressDialog.dismiss();

                recyclerView.setOnScrollChangeListener(new View.OnScrollChangeListener() {
                    @Override


                    public void onScrollChange(View view, int i, int i1, int i2, int i3) {
                        isLastItemDisplaying(recyclerView);
                    }
                });

            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                //
            }
        }){
            @Override
            protected Map<String, String> getParams() throws AuthFailureError {
                Map<String, String> parameters = new HashMap<String, String>();

                parameters.put("id", String.valueOf(adapter.getItemCount()));

                return parameters;
            }
        };
        queue.add(stringRequest);
    }

1 个答案:

答案 0 :(得分:0)

我之前遇到此问题,而不是将id参数传递给我的API,我将id添加到我的网址

像这样定义您的网址

private String getbeichtenphp = "http://your/url/here/?id="

然后在排球时将id值传递给网址。

 //pass the id as a parameter to your requestJsonObject function here
 private void requestJsonObject(int id) {

        RequestQueue queue = Volley.newRequestQueue(this);
                                                                           //add your id here
        StringRequest stringRequest = new StringRequest(Request.Method.POST, getbeichtenphp + id, new Response.Listener<String>() {

对于此功能的初始调用应为

requestJsonObject(0)

通过这样做,id将不断加起来,最终每次Volley Request获取新的2项。

还有一件事,您应该使用GET方法作为Request.method并在php处获取值,而不是使用POST方法。

看看这个youtube video,我想你会有更清晰的画面。