【问题标题】:Downloading Image from server using universal image loader使用通用图像加载器从服务器下载图像
【发布时间】:2016-04-21 13:29:54
【问题描述】:

在我的应用程序中,我正在从服务器下载图像并将图像设置为视图寻呼机。一切正常,但下载图像时会有轻微延迟(例如 Wifi 上的 8-10 秒)。图像大小范围为 200kb-800kb。我还在下载过程中添加了一个进度条,但进度条没有显示。 有人可以帮我解决这个问题。 下面是代码。

public void fetchImageUrl() {
    progressBar.setVisibility(View.VISIBLE);
    String url = URLMap.getUploadImgChangeStatus("get_amazonserver_image");
    url = url.replace("{id}", companyId).replace("{crid}", callRecordId);
    StringRequest request = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {
            System.out.println("Response0000" + response);
            if (response.equals("[]")) {
                setView();
            } else {
                getAmazonImageUrl(response);
            }
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            Log.i("ErrorListner=", error.getMessage());
        }
    });
    RequestQueue requestQueue = Volley.newRequestQueue(this);
    requestQueue.add(request);
}

public void getAmazonImageUrl(String response) {
    try {
        imgUrl = new ArrayList<>();
        String[] arr;
        JSONArray jArray = new JSONArray(response);
        for (int i = 0; i < jArray.length(); i++) {
            if (jArray.getJSONObject(i).has("ImagePath")) {
                arr = jArray.getJSONObject(i).getString("ImagePath").split("\\s+");
                imgUrl = Arrays.asList(arr);
            }
        }
    } catch (JSONException e) {
    }
    imageViewAdapter = new ImageViewAdapter(this, iv, imgUrl, viewPager, this);
    viewPager.setAdapter(imageViewAdapter);
    progressBar.setVisibility(View.GONE);
}

下面是我的适配器类

public class ImageViewAdapter extends android.support.v4.view.PagerAdapter {
private Context context;
ImageView imageView;
ProgressBar progressBar;
private LayoutInflater layoutInflater;
ViewPager viewPager;
Activity activity;
List<String> imgUrl;

public ImageViewAdapter(Context context, ImageView imageView, List<String> imgUrl,
                        ViewPager viewPager, Activity activity){
    System.out.println("Inside ImageViewAdapter");
    this.context=context;
    this.imageView = imageView;
    this.viewPager = viewPager;
    this.activity = activity;
    this.imgUrl=imgUrl;
    System.out.println(imgUrl.size());
}

@Override
public int getCount() {
    return imgUrl.size();
}

@Override
public boolean isViewFromObject(View view, Object object) {
    return view == ((LinearLayout) object);
}


@Override
public Object instantiateItem(ViewGroup container, final int position) {
    layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    final View item_view = layoutInflater.inflate(R.layout.image_swipe_custom_layout, container, false);
    //setting custom font
    Typeface custom_font = Typeface.createFromAsset(context.getAssets(),"fonts/DroidSerif.ttf");
    TextView tv = (TextView) item_view.findViewById(R.id.image_count);
    tv.setTypeface(custom_font);
    imageView = (ImageView) item_view.findViewById(R.id.imageView1);
    progressBar=(ProgressBar)item_view.findViewById(R.id.imgLoadingPbar);

    // UNIVERSAL IMAGE LOADER SETUP
    DisplayImageOptions defaultOptions = new DisplayImageOptions.Builder()
            .cacheOnDisc(true).cacheInMemory(true)
            .imageScaleType(ImageScaleType.EXACTLY)
            .displayer(new FadeInBitmapDisplayer(300)).build();

    ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(
            context)
            .defaultDisplayImageOptions(defaultOptions)
            .memoryCache(new WeakMemoryCache())
            .discCacheSize(100 * 1024 * 1024).build();

    com.nostra13.universalimageloader.core.ImageLoader.getInstance().init(config);


    // UNIVERSAL IMAGE LOADER OPTION SETUP
    DisplayImageOptions options = new DisplayImageOptions.Builder().cacheInMemory(true)
            .cacheOnDisc(true).resetViewBeforeLoading(true)
            .showImageForEmptyUri(R.drawable.ic_user)
            .showImageOnFail(R.drawable.noimgavailable)
            .showImageOnLoading(R.drawable.spinner_border).build();

    /*final Animation animation= AnimationUtils.loadAnimation(context,R.anim.rotate);*/

    com.nostra13.universalimageloader.core.ImageLoader imageLoader = com.nostra13.universalimageloader.core.ImageLoader.getInstance();
    imageLoader.displayImage(imgUrl.get(position), imageView, options, new ImageLoadingListener() {
        @Override
        public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
            progressBar.setVisibility(View.GONE);
        }

        @Override
        public void onLoadingStarted(String imageUri, View view) {
            progressBar.setProgress(0);
            progressBar.setVisibility(View.VISIBLE);
        }

        @Override
        public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
            progressBar.setVisibility(View.GONE);
        }

        @Override
        public void onLoadingCancelled(String imageUri, View view) {

        }
    });

    if(position == 0) {
        tv.setText("Image " + "1");
        tv.setTypeface(custom_font);
    }else if(position == 1) {
        tv.setText("Image " + "2");
        tv.setTypeface(custom_font);
    } else if(position == 2) {
        tv.setText("Image " + "3");
        tv.setTypeface(custom_font);
    }
    container.addView(item_view);
    return item_view;
}

@Override
public void destroyItem(ViewGroup container, int position, Object object) {
    //((ViewPager)container).removeView((View)object);
    container.removeView((LinearLayout) object);
}

}

我尝试过使用毕加索,异步任务,但一切都一样。毕加索和通用图像加载器几乎需要相同的时间,但异步任务更晚。 在活动类中设置的进度条显示一两秒。但是当它进入适配器类时,我有另一个没有显示的进度条。 我的问题是 1.有什么方法可以让我更快地下载图片 2.如何正确使用进度条。 提前致谢

【问题讨论】:

    标签: android universal-image-loader


    【解决方案1】:

    您可以在特定位置添加进度条。示例代码如下。如果有任何问题请点击此链接Universal Image Loader description

    imageLoader.displayImage(imageUri, imageView, options, new ImageLoadingListener() {
    @Override
    public void onLoadingStarted(String imageUri, View view) {
        ...
    }
    @Override
    public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
        ...
    }
    @Override
    public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
        ...
    }
    @Override
    public void onLoadingCancelled(String imageUri, View view) {
        ...
    }
    

    },新的 ImageLoadingProgressListener() { @覆盖 public void onProgressUpdate(String imageUri, View view, int current, int total) { ... } });

    【讨论】:

      【解决方案2】:

      好的,我得到了解决方案。除了进度条,我们还需要设置视图。 我正在发布代码。

      com.nostra13.universalimageloader.core.ImageLoader imageLoader = com.nostra13.universalimageloader.core.ImageLoader.getInstance();
          imageLoader.displayImage(imgUrl.get(position), imageView, options, new ImageLoadingListener() {
              @Override
              public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
                  progressBar.setVisibility(View.GONE);
              }
      
              @Override
              public void onLoadingStarted(String imageUri, View view) {
                  //progressBar.setProgress(0);
                  progressBar.setVisibility(View.VISIBLE);
                  view.setVisibility(View.GONE);
              }
      
              @Override
              public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
                  progressBar.setVisibility(View.GONE);
                  view.setVisibility(View.VISIBLE);
              }
      
              @Override
              public void onLoadingCancelled(String imageUri, View view) {
      
              }
          });
      

      【讨论】:

      • 你有没有让下载速度更快?
      猜你喜欢
      • 1970-01-01
      • 2012-12-01
      • 2017-08-06
      • 1970-01-01
      • 1970-01-01
      • 2016-06-23
      • 1970-01-01
      • 2016-07-28
      相关资源
      最近更新 更多