如何解决如何在 RecyclerView Android 中更快地加载项目
每当数据添加到服务器时,回收器视图加载缓慢,我使用 API 获取数据。 安装应用程序或在数据库中添加项目时,它加载缓慢约 3-5 秒,但当我重新打开应用程序时,它工作正常。 我使用的数据库是 MysqL PHPadmin,我使用 Volley 库从 API 中获取数据
问题
如何加快加载数据的过程,或者有什么方法可以在后台加载数据,这样无论何时用户打开应用程序,他都不必像上面提到的那样等待几秒钟。
private void loadRecyclerViewData(){
ProgressDialog progressDialog = new ProgressDialog(getContext());
progressDialog.setMessage("Please wait your stories are loading...");
progressDialog.show();
String URL_DATA = "https://.../webservices/api/getstories.PHP";
//fetch the data from the server
StringRequest stringRequest = new StringRequest(Request.Method.GET,URL_DATA,response -> {
progressDialog.dismiss();
try {
JSONObject jsonObject = new JSONObject(response);
JSONArray array = jsonObject.getJSONArray("data");
for(int i =0; i<array.length(); i++){
JSONObject o = array.getJSONObject(i);
StoriesModel item = new StoriesModel (
o.getString("story"),o.getString("conclusion"),o.getString("rating"),o.getString("author")
);
storiesModels.add(item);
}
mAdapter = new StoriesAdapter(storiesModels,getContext());
recyclerView.setAdapter(mAdapter);
} catch (JSONException e) {
e.printstacktrace();
}
},error -> {
progressDialog.dismiss();
Toast.makeText(getContext(),(CharSequence) new VolleyError(),Toast.LENGTH_LONG).show();
});
RequestQueue requestQueue = Volley.newRequestQueue(getContext());
requestQueue.add(stringRequest);
}
适配器类:-
public class StoriesAdapter extends RecyclerView.Adapter < StoriesAdapter.ViewHolder > {
private List < StoriesModel > storiesModels;
private final Context context;
public StoriesAdapter(List < StoriesModel > storiesModels,Context context) {
this.storiesModels = storiesModels;
this.context = context;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent,int viewType) {
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.card,parent,false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder,int position) {
StoriesModel storiesModel = storiesModels.get(position);
holder.authorName.setText(storiesModel.getAuthor());
holder.conclusion.setText(storiesModel.getConclusion());
holder.rating.setText(storiesModel.getrating());
holder.story.setText(storiesModel.getStory());
holder.relativeLayout.setonClickListener(v - > {
Intent intent = new Intent(context,DetailActivity.class);
intent.putExtra("authorName",storiesModel.getAuthor());
intent.putExtra("conclusion",storiesModel.getConclusion());
intent.putExtra("rating",storiesModel.getrating());
intent.putExtra("story",storiesModel.getStory());
context.startActivity(intent);
});
}
@Override
public int getItemCount() {
return storiesModels.size();
}
public static class ViewHolder extends RecyclerView.ViewHolder {
public final TextView authorName;
public final TextView conclusion;
public final TextView rating;
public final TextView story;
public final RelativeLayout relativeLayout;
public ViewHolder(@NonNull View itemView) {
super(itemView);
authorName = itemView.findViewById(R.id.authorName);
conclusion = itemView.findViewById(R.id.conclusion);
rating = itemView.findViewById(R.id.rating);
story = itemView.findViewById(R.id.story);
relativeLayout = itemView.findViewById(R.id.Newlinear_layout);
}
}
}
解决方法
- 在您的 Api 中进行分页
- 使用 Retrofit 而不是 Volley。 You can check it.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。