recylerview分页

wgx48brx  于 2021-07-12  发布在  Java
关注(0)|答案(1)|浏览(194)

我有一个墙纸应用程序,我从api获取图像数据,问题是我从api获取所有图像这就是为什么它需要太多的加载,所以我想添加更好的优化分页,但问题是我不想使用mysql,因为我有这么多的图像。如果没有mysql,如何添加分页?
json[{“url”:http://.com/wallpapers/animals/790669.jpg“,”time“:”2021-04-21 08:41:17“},{”url“:”http://.com/wallpapers/animals/790810.jpg“,”time“:”2021-04-21 08:41:17“}]
我的代码

private void getData() {
    RequestQueue queue = Volley.newRequestQueue(this);
    JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.GET, dataurl+name, null, new Response.Listener<JSONObject>() {

        @Override
        public void onResponse(JSONObject response) {
            try {
                JSONArray array = response.getJSONArray("files");
                for (int i = 0; i < array.length(); i++) {
                    JSONObject imgObject = array.getJSONObject(i);
                    WPList imgList = new WPList();
                    imgList.setURL(imgObject.getString("url").toString());
                    imgList.setDate(imgObject.getString("time").toString());
                    anlist.add(imgList);
                }
            } catch (JSONException e) {
                e.printStackTrace();
            }
            recyclerView.setLayoutManager(new GridLayoutManager(MainActivity2.this, 3));
            recyclerView.setHasFixedSize(true);
            adapter = new WallpaperAdapter(MainActivity2.this, anlist);
            progressBar.setVisibility(View.GONE);
            recyclerView.setAdapter(adapter);
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {

            Toast.makeText(MainActivity2.this, "No Available Image Found", Toast.LENGTH_SHORT).show();
            Log.d("tag", "onErrorResponse: " + error.getMessage());
        }
    });
    // Add JsonObjectRequest to the RequestQueue
    jsonObjectRequest.setShouldCache(false);
    jsonObjectRequest.setRetryPolicy(new DefaultRetryPolicy(DefaultRetryPolicy.DEFAULT_TIMEOUT_MS * 2,DefaultRetryPolicy.DEFAULT_MAX_RETRIES,DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
    queue.getCache().clear();
    queue.add(jsonObjectRequest);

}
ilmyapht

ilmyapht1#

您有2个请求:
获取所有墙纸的列表
阅读图像
因此,您可以不分页地解决问题:
当用户滚动到某个项目时,首先加载新图像。
提出请求 onBindViewHolder ,如果尚未下载图像。
在应用程序内部存储中存储已请求的图像。因此,通过向上滚动,您将不需要再次加载数据。
如何:
在activity/fragment中,生成请求图像的方法
对请求进行计数(如果用户滚动查看3项-计数=3)。首先,当一切都完成后,做 adapter.notifyDataSetChanged() 提供活动/片段示例作为adapter.holder的接口
为每个项目设置一些 minHeight 在同一时间只装载少量物品。
onBindViewHolder 检查带有图像的文件是否已存在。
如果url=“..wallpapers/animals/790669.jpg”,那么创建同名文件时,首先还要在本地存储中创建一个文件夹。
如果文件存在-只需读取并显示一个图像
如果不存在-提出请求

相关问题