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
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.
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.
Theres loadImage(String uri, ImageLoadingListener listener)
, ich denke, Sie können es mit Null für den Hörer nennen, wenn Sie nicht brauchen.
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
yep, ich habe es vorher versucht, wird nicht helfen. – scott
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
}
});
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
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.
'.discCache (new UnlimitedDiscCache (cacheDir)) // Sie können Ihre eigene Disc-Cache-Implementierung übergeben .discCacheFileNameGenerator (new HashCodeFileNameGenerator())' das ist, was ich will, thx. – scott
Hier, wenn ich Verzeichnisnamen in 'neue UnlimitedDiscCache (CacheDir) übergeben' als dieses Verzeichnis nicht in SDCard erstellt Warum ist es passiert? –
haben Sie die Schreibberechtigung in der Manifestdatei hinzugefügt. Überprüfen Sie, ob (cacheDir.exists()) {eine Nachricht protokollieren} – Raghunandan