androidimagedownloadaquery

AQuery: How to download images in non-sequential manner without any reference to imageView in the aQuery call


Question 1: Is it possible to download image file without giving the reference to ImageView?

Question 2: Can i download each file in a separage instance of aQuery or do i have to download the file sequentially? e.g, waiting for the callback of current file download and then trigger the next file download call? Below is my code

// Ad is my custom model class

// adList is my list of Ads having URL's to the ads hosted somewhere

// imageView is an invisible imageView as downloading does not start if i don't give any reference to any imageView resource

for (String adUrl : adList) {

    if (adUrl.length() > 0) {
        AQuery aQuery = new AQuery(DownloadAdActivity.this);
        BitmapAjaxCallback callback = new BitmapAjaxCallback(); 
        callBack.url(adUrl);
        callBack.fallback(R.id.placeHolderResource);
        callBack.fileCache(true);
        callBack.memCache(true);
        aQuery.id(imageView).image(callBack);

    }

}

I need to download 20/30 images when the app starts first time, so far i am doing it by giving a hidden imageView reference and trigging the aQuery sequentially after each image has downloaded. I tried to generate 20/30 request in a loop but only the last aQuery trigger call works which cancels the previous image download call.

Please guide me: 1- How to cache images without giving any reference to the imageView 2- How to download images in parallel manner, not in sequential manner through AQuery.


Solution

  • 1) You can use ajax call without ImageView reference to download image.

    androidQuery.ajax("url", Bitmap.class, 0, new AjaxCallback<Bitmap>() {
                @Override
                public void callback(String url, Bitmap bitmap, AjaxStatus status) {
                    super.callback(url, bitmap, status);
    
                }
            });
    

    2) By default you can download 4 images concurrently. But you can change as per your requirement like this

    AjaxCallback.setNetworkLimit(8);