Android - Volley的ImageLoader下載圖片
使用Volley的ImageLoader下載圖片時, onResponse會調用兩次, 第一次Bitmap是空, 設置默認圖片; 第二次是下載的網絡圖片.
源碼中:
// Update the caller to let them know that they should use the default bitmap. imageListener.onResponse(imageContainer, true);
使用時, 在加載圖片之前, 需要判斷Bitmap是否為空, 再加載.
代碼
/** * 從服務器下載圖片 * onResponse會調用兩次, 第一次Bitmap是null, 設置默認圖片; 第二次是網絡圖片. * * @param listener 接收監聽 */ protected void parseImage(final ImageListener<Bitmap> listener) { WebScheduler.getInstance().getImageLoader().get(NetworkHelper.getRealUrl(mImgUrl), new ImageLoader.ImageListener() { @Override public void onResponse(ImageLoader.ImageContainer imageContainer, boolean b) { mImgBitmap = imageContainer.getBitmap(); if (mImgBitmap != null) listener.onResponse(mImgBitmap); } @Override public void onErrorResponse(VolleyError volleyError) { ToastHelper.getInstance().showToast(R.string.network_error); } }, 0, 0 ); }
源碼
/** * Issues a bitmap request with the given URL if that image is not available * in the cache, and returns a bitmap container that contains all of the data * relating to the request (as well as the default image if the requested * image is not available). * @param requestUrl The url of the remote image * @param imageListener The listener to call when the remote image is loaded * @param maxWidth The maximum width of the returned image. * @param maxHeight The maximum height of the returned image. * @param scaleType The ImageViews ScaleType used to calculate the needed image size. * @return A container object that contains all of the properties of the request, as well as * the currently available image (default if remote is not loaded). */ public ImageContainer get(String requestUrl, ImageListener imageListener, int maxWidth, int maxHeight, ScaleType scaleType) { // only fulfill requests that were initiated from the main thread. throwIfNotOnMainThread(); final String cacheKey = getCacheKey(requestUrl, maxWidth, maxHeight, scaleType); // Try to look up the request in the cache of remote images. Bitmap cachedBitmap = mCache.getBitmap(cacheKey); if (cachedBitmap != null) { // Return the cached bitmap. ImageContainer container = new ImageContainer(cachedBitmap, requestUrl, null, null); imageListener.onResponse(container, true); return container; } // The bitmap did not exist in the cache, fetch it! ImageContainer imageContainer = new ImageContainer(null, requestUrl, cacheKey, imageListener); // Update the caller to let them know that they should use the default bitmap. imageListener.onResponse(imageContainer, true); // Check to see if a request is already in-flight. BatchedImageRequest request = mInFlightRequests.get(cacheKey); if (request != null) { // If it is, add this request to the list of listeners. request.addContainer(imageContainer); return imageContainer; } // The request is not already in flight. Send the new request to the network and // track it. Request<Bitmap> newRequest = makeImageRequest(requestUrl, maxWidth, maxHeight, scaleType, cacheKey); mRequestQueue.add(newRequest); mInFlightRequests.put(cacheKey, new BatchedImageRequest(newRequest, imageContainer)); return imageContainer; }
來自: http://blog.csdn.net//caroline_wendy/article/details/47290723
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!