मेरे कोड है:एंड्रॉइड: वॉली: मुख्य धागे से वॉली छवि लोडर क्यों लागू किया जाना चाहिए?
class MyService extends Service{
public void onCreate(){
new ImageLoader(mRequestQueue, new VolleyLruCache(cacheSize))
.get(url, new ImageListener(){..});
}
}
मैं अच्छी तरह से काम कर रहा उम्मीद है, लेकिन यह IllegalStateException अपवाद फेंक देते हैं। तो, वॉली पूर्ण स्रोत खोलें, इसे ढूंढें।
[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;
}
मैं throwIfNotOnMainThread() .. समझ में नहीं आता क्यों वॉली imageLoader मुख्य थ्रेड से लागू किया जाना चाहिए?
धन्यवाद।
java.lang.IllegalStateException: ImageLoader मुख्य थ्रेड से लागू किया जाना चाहिए। com.android.volley.toolbox.ImageLoader.get (ImageLoader.java:189) com.android.volley.toolbox पर पर com.android.volley.toolbox.ImageLoader.throwIfNotOnMainThread (ImageLoader.java:467) पर । ImageLoader.get (ImageLoader.java:171) android.os.Handler.dispatchMessage (हैंडलर.जावा:102) atroid.os.Looper.loop (Looper.java:136) atroid.os.HandlerThread पर। रन (हैंडलर थ्रेड.जावा:61) – JuL