我从服务器下载图像和数据,它会在几秒钟后填充并填充包含图像地址的对象的arraylist,并且您知道recyclelerView的onBindViewHolder比从服务器获取数据更快。
所以在onBindViewHolder中使用picasso从arraylist中的地址加载数据,在这种情况下(你知道onBindViewHolder比从服务器获取数据运行得更快)当arraylist为空时(因为数据不是来自服务器)picasso尝试访问arraylist中的对象并结束了outOfboundException
我想onbindViewHolder(或picasso)等到数据到来并且arraylist不为空然后开始通过毕加索加载图像我该怎么做呢,我的实现:
Picasso.with(mContext)
.load(NetworkUtils.getList().get(getAdapterPosition()).getImage()).placeholder(R.drawable.flower)
.into(mMovieImageView);
排球的响应:
public void onResponse(Object o) {
try {
JSONObject jsonObject = new JSONObject(o.toString());
arrayData = jsonObject.getJSONArray("results");
} catch (JSONException e) {
e.printStackTrace();
}
for(int i =0; i < 50; i++) {
data = new ModelDataClass();
try {
if (arrayData.equals("")) {
Log.i("mainactivity " , "null array data");
}
else{
response = arrayData.getJSONObject(i);
data.setTitle(response.getString("original_title"));
data.setRating(response.getDouble("vote_average"));
data.setDescription(response.getString("overview"));
data.setImage(response.getString("poster_path"));}
}catch(JSONException e){
e.printStackTrace();
}
list.add(data);
}
答案 0 :(得分:0)
当您已从服务器获取数据并对其进行解析时,您必须使用onResponse
方法设置UI。这是最好的用户体验。在加载时向用户显示进度条或模拟。
public void onRequestStart(){
showProgressBar(true);
}
public void onResponse(){
//fetch your data
//add your data to list or arrayList
showProgressBar(false);
setupRecycler(list);
}
public void setupRecycler(List<Object> response){
YourRecyclerViewAdapter adapter = new YourRecyclerViewAdapter(response);
recyclerView.setLayoutManager(...); // your layout manager
recyclerView.setAdapter(adapter);
}