2013-04-15 6 views
8

Soweit ich weiß, Universal-Image-Loader bieten 2 Arten von Methoden zur Anzeige von Bildern. imageLoader.loadImage und imageLoader.displayImage. Diese beiden Methoden müssen jedoch an das anzuzeigende Oberflächenelement gebunden sein. Kann ich nur Dateien für den Cache in einem Thread herunterladen (für zukünftige Anzeige). Ich muss dieses Bild jetzt nicht anzeigen.Wie kann ich nur Bild mit Universal-Image-Loader herunterladen

Antwort

5

Kann ich nur Dateien für den Cache in einem Thread herunterladen (für zukünftige Anzeige). Ich muss dieses Bild jetzt nicht anzeigen.

Sie können Dateien mit dem Executor herunterladen oder einen Thread erstellen. Sie müssen keinen universellen Image-Loader verwenden.

http://developer.android.com/reference/java/util/concurrent/Executor.html.

Sie können auch einen DownloadManager verwenden und die Datei in SD-Karte speichern. Sie können dieselben zur späteren Verwendung abrufen.

http://oodlestechnologies.com/blogs/Downloading-and-Retrieving-Files-on-SD-card-in-Android-using-Android-SDK-in-Eclipse

Bitmaps cachen Sie die Bilder in einen Ordner in sdcard schreiben kann.

Caching Bitmaps

http://developer.android.com/training/displaying-bitmaps/cache-bitmap.html.

Sie können Bitmaps im Speicher oder auf der Festplatte zwischenspeichern. Der Link enthält Details zum Thema.

Sie verwenden grundsätzlich UIL ofr Bilder in Listview oder Grdiview anzeigen. Um UIL in Listview oder Gridview zu verwenden, können Sie wie folgt vorgehen.

https://github.com/nostra13/Android-Universal-Image-Loader. Es basiert auf Lazy List (funktioniert nach dem gleichen Prinzip). Aber es hat viele andere Konfigurationen. Sie können ein Fehlerbild anzeigen, wenn der Download fehlgeschlagen ist. Kann Bilder mit abgerundeten Ecken anzeigen. Kann auf CD oder Speicher zwischenspeichern. Kann Bild komprimieren.

in Ihrem benutzerdefinierten Adapter Konstruktor

File cacheDir = StorageUtils.getOwnCacheDirectory(a, "your folder"); 

// Get singletone instance of ImageLoader 
imageLoader = ImageLoader.getInstance(); 
// Create configuration for ImageLoader (all options are optional) 
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(a) 
     // You can pass your own memory cache implementation 
    .discCache(new UnlimitedDiscCache(cacheDir)) // You can pass your own disc cache implementation 
    .discCacheFileNameGenerator(new HashCodeFileNameGenerator()) 
    .enableLogging() 
    .build(); 
// Initialize ImageLoader with created configuration. Do it once. 
imageLoader.init(config); 
options = new DisplayImageOptions.Builder() 
.showStubImage(R.drawable.stub_id)//display stub image 
.cacheInMemory() 
.cacheOnDisc() 
.displayer(new RoundedBitmapDisplayer(20)) 
.build(); 

In Ihrem getView()

ImageView image=(ImageView)vi.findViewById(R.id.imageview); 
imageLoader.displayImage(imageurl, image,options);//provide imageurl, imageview and options 

Sie mit anderen Optionen konfigurieren können an Ihre Bedürfnisse anpassen.

Zusammen mit Lazy Loading/Universal Image Loader können Sie Inhaber für reibungslose Scrolling und Leistung anzeigen. http://developer.android.com/training/improving-layouts/smooth-scrolling.html.

+0

'.discCache (new UnlimitedDiscCache (cacheDir)) // Sie können Ihre eigene Disc-Cache-Implementierung übergeben .discCacheFileNameGenerator (new HashCodeFileNameGenerator())' das ist, was ich will, thx. – scott

+0

Hier, wenn ich Verzeichnisnamen in 'neue UnlimitedDiscCache (CacheDir) übergeben' als dieses Verzeichnis nicht in SDCard erstellt Warum ist es passiert? –

+0

haben Sie die Schreibberechtigung in der Manifestdatei hinzugefügt. Überprüfen Sie, ob (cacheDir.exists()) {eine Nachricht protokollieren} – Raghunandan

2

Theres loadImage(String uri, ImageLoadingListener listener), ich denke, Sie können es mit Null für den Hörer nennen, wenn Sie nicht brauchen.

+0

java.lang.IllegalArgumentException: Falsche Argumente wurden an die displayImage() -Methode übergeben (ImageView-Referenz darf nicht null sein). Ich habe gerade überprüft, indem ich anstelle von Bildansicht null übergeben habe. Das Übergeben von null als Parameter wird nicht helfen. – Raghunandan

+0

yep, ich habe es vorher versucht, wird nicht helfen. – scott

11

Sie können immer noch UIL verwenden. Basierend auf dem unten verwendeten displayOptions würden die Bilder zwischengespeichert werden.

Siehe hier - https://github.com/nostra13/Android-Universal-Image-Loader

// Bild laden, es dekodieren Bitmap Bitmap und zurück

imageLoader.loadImage(imageUri, displayOptions, new SimpleImageLoadingListener() { 
    @Override 
    public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) { 
     // Do whatever you want with Bitmap 
    } 
}); 
+0

Was meinen Sie mit "Bitmap zurück zum Rückruf"? Ich ändere die loadImage-Bitmap, aber ich weiß nicht, wie ich sie anzeigen kann (die modifizierte Version). Könnten Sie bitte etwas ausarbeiten? – v4r

0

Hinzufügen zu @Robin Srivastava Antwort auf Rückruf:

Sie müssen instanziiert auch die ImageLoader Kontext, zum Beispiel: imageLoader = ImageLoader.getInstance(); bevor Sie die loadImage Methode verwenden können. Der Parameter displayOptions ist ebenfalls optional, sodass Sie ihn gegebenenfalls ausschließen können.