ImageFrom Url!

  • 7 Antworten
  • Letztes Antwortdatum
A

AirTrake

Neues Mitglied
0
Hallo,
Ich möchte ein Image laden, dafür hab ich eine Funktion gefunden im Internet.
Code:
package com.function;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.io.Closeable;

import java.io.IOException;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.util.Log;


public class BitMapLoad {
    

    public static Bitmap loadBitmap(String url) {
        Bitmap bitmap = null;
        InputStream in = null;
        BufferedOutputStream out = null;

        try {
            in = new BufferedInputStream(new URL(url).openStream(), IO_BUFFER_SIZE);

            final ByteArrayOutputStream dataStream = new ByteArrayOutputStream();
            out = new BufferedOutputStream(dataStream, IO_BUFFER_SIZE);
            copy(in, out);
            out.flush();

            final byte[] data = dataStream.toByteArray();
            BitmapFactory.Options options = new BitmapFactory.Options();
            //options.inSampleSize = 1;

            bitmap = BitmapFactory.decodeByteArray(data, 0, data.length,options);
        } catch (IOException e) {
            Log.e(TAG, "Could not load Bitmap from: " + url);
        } finally {
            closeStream(in);
            closeStream(out);
        }

        return bitmap;
    }
}
Aber obwohl ich die nötigen Daten importiert hab. Wird IO_BUFFERSIZE
, copy und closeStream nicht erkannt.
 
Weiss keiner wieso das bei mir nicht funktioniert???
 
Wie wäre es damit, wenn du eine externe Library verwendest? Ich kann dir da URLImageViewHelper empfehlen. Du gibts ihr die URL und sie Download + Cached das Bild. Sollte die app dann wieder gestartet werden wird das Bild aus dem App-Cache geladen
 
Nabend,

zu deinen Problemen. Ich weiß nicht wo Du die Klasse her hast, aber die ist nicht vollständig.

Ein kurzer Blick in die API hilft, wenn man BufferedOutputStream nicht auswendig kennt:
BufferedOutputStream (Java Platform SE 6)
BufferedOutputStream(OutputStream out, int size)

Aha, zweites Argument ist ein int. Und IO_BUFFER_SIZE offenbar eine Konstante der KLasse, die vergessen wurde.

Folgends würde also gehen:

public class BitMapLoad { public static final int IO_BUFFER_SIZE = 1024;
Dann zu deinem closeStream(...):
Hierbei handelt es sich um eine Methode. Diese Methode muss in deiner Klasse implementiert werden, da deine Klasse von keiner anderen Klasse erbt und somit diese Methode ebenfalls nicht erben kann.

Probier es doch mal so:

PHP:
private static void closeStream(Closeable closeable){
   try {
      if (closeable!=null){
          closeable.close();
      }
   } catch (IOException e){
      e.printStrackTrace();
      System.out.error("Hätte ich mich doch lieber mal um die IOException gekümmert");
   }

}
Die IOException musst Du wohl fangen, da sie im aufrufenden Teil nicht behandelt wird.

Alles in Allem, die Klasse ist nicht vollständig und so nie gelaufen.

Edit: Ich seh grad
copy(in, out);Die Methode fehlt und muss ebenfalls noch implementiert werden.
Gute Übung.
 
Zuletzt bearbeitet:
finds auch ein bischen umständlich gemacht....


Code:
                InputStream is = (InputStream) new URL(url).getContent();
                Drawable d = Drawable.createFromStream(is, "src name");

tuts auch......
 
Aber dabei Hast du halt kein caching, etc

Sent from my GT-I9100 using Android-Hilfe.de App
 
jooo.. des stimmt allerdings.. kommt halt drauf an wie mans möchte ;)
 
Ich lade Bilder von einer URL um sie in einer ImageView anzuzeigen gerade wie folgt:
Code:
Bitmap bitmap = null;
try
{
	// Bild von URL laden
	bitmap = BitmapFactory.decodeStream((InputStream) new URL("www.image.de/image.jpg").getContent());
} catch (MalformedURLException e)
{ 
	//TODO handle
} catch (IOException e)
{
	//TODO handle
}
// Bild erstellen
ImageView imageView = new ImageView(context);
imageView.setImageBitmap(bitmap);
hilft dir das weiter?
 
Zurück
Oben Unten