如何在从服务器加载数据时处理用户界面

时间:2017-08-08 20:07:11

标签: java android arraylist android-volley picasso

我从服务器下载图像和数据,它会在几秒钟后填充并填充包含图像地址的对象的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);

        }

1 个答案:

答案 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);
}