Benim kodudur:Android: Volley: Neden ana konudan volley imageLoader çağrılmalı?
class MyService extends Service{
public void onCreate(){
new ImageLoader(mRequestQueue, new VolleyLruCache(cacheSize))
.get(url, new ImageListener(){..});
}
}
Ben iyi çalışıyor bekliyoruz, ancak IllegalStateException İstisna atmak. Yani, volley tam kaynağını açın, bunu bulun.
[ImageLoader.java]
public ImageContainer get(String requestUrl, ImageListener imageListener,
int maxWidth, int maxHeight) {
// only fulfill requests that were initiated from the main thread.
throwIfNotOnMainThread(); //<- why???
final String cacheKey = getCacheKey(requestUrl, maxWidth, maxHeight);
// 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<?> newRequest =
new ImageRequest(requestUrl, new Listener<Bitmap>() {
@Override
public void onResponse(Bitmap response) {
onGetImageSuccess(cacheKey, response);
}
}, maxWidth, maxHeight,
Config.RGB_565, new ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
onGetImageError(cacheKey, error);
}
});
mRequestQueue.add(newRequest);
mInFlightRequests.put(cacheKey,
new BatchedImageRequest(newRequest, imageContainer));
return imageContainer;
}
Ben voleybolu imageLoader ana iş parçacığı gelen çağrılması gerektiğinde Neden throwIfNotOnMainThread() .. anlamıyorum?
Teşekkürler.
java.lang.IllegalStateException: ImageLoader ana iş parçacığından çağrılmalı. Com.android.volley.toolbox.ImageLoader.get adresinde com.android.volley.toolbox.ImageLoader.throwIfNotOnMainThread (ImageLoader.java:467) adresinden (ImageLoader.java:467) com.android.volley.toolbox adresindeki . Android.os.Looper.loop (Looper.java:136) adresinde, android.os.HandlerThread adresinde bulunan ImageLoader.get (ImageLoader.java:171) , android.os.Handler.dispatchMessage (Handler.java:102) . koş (HandlerThread.java:61) – JuL