Я пытаюсь создать бесконечный свиток RecyclerView. Я работаю с PHP и MySQL. В моем PHP-скрипте запрос на 2 элемента каждый раз, когда RecyclerView достигает дна.
$query = "SELECT * FROM beichten WHERE id BETWEEN ($id+1) AND ($id+2)";
Можно ли сделать это с Волей?
Я создал класс, который запускает мой класс запросов каждый раз, когда 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() {
@Overridepublic 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);
}
Я сталкиваюсь с этой проблемой раньше, чем пройти id
параметр в мой API, я добавляю id
это на мой URL
Определите ваш URL, как это
private String getbeichtenphp = "http://your/url/here/?id="
Затем при залпе вы передаете значение идентификатора в URL.
//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)
Делая это, идентификатор будет продолжать складываться, заканчивая тем, что выбирал новый 2 предмета каждый Запрос залпа.
Еще одна вещь, вы должны использовать GET
метод как твой Request.method
и получить значение на PHP, а не с помощью POST
метод.
Посмотри на это YouTube видео,Я думаю, у вас будет более четкая картина.
Других решений пока нет …