我正在尝试创建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);
}
答案 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,我想你会有更清晰的画面。