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