2010-09-10 13 views
9

Ich möchte ein ImageView ein Bild auf einer Website anzeigen lassen. So erstelle ich eine neue Image und führen imgView.setImageURI(uri);schlechter Bitmap-Fehler beim Setzen von Uri

Wenn ich die App starten das Bild nicht angezeigt und ich bekomme den Fehler „failed ResolveUri auf schlechten Bitmap Uri (uri)“.

Irgendwelche Ideen, wie man das löst?

Antwort

17

Wenn es kein Inhalts-URI ist, kann this link helfen. Es scheint anzuzeigen, dass imgView.setImageURI() nicht für reguläre URIs verwendet werden sollte. Kopieren in dem entsprechenden Bit:

Ja, ImageView.setImageURI(ContentURI uri) funktioniert, aber es ist für den Inhalt URIs insbesondere auf die Android-Plattform, nicht URIs Internet-Ressourcen angeben. Die Konvention wird auf binäre Objekte (z. B. Bilder) angewendet, die nicht direkt über die Cursor-Methoden eines ContentProviders verfügbar gemacht werden können. Stattdessen wird eine String-Referenz verwendet, um auf einen eindeutigen Inhalts-URI zu verweisen, der durch eine separate Abfrage für den Inhaltsanbieter aufgelöst werden kann. Die setImageURI-Methode ist einfach ein Wrapper, um diese Schritte für Sie auszuführen. Ich habe diese Verwendung von setImageView getestet und es funktioniert wie erwartet. Für Ihre Verwendung würde ich jedoch BitmapFactory.decodeStream() und URL.openStream() betrachten.

Auch diese Antwort in sich geschlossene zu machen, aus einem anderen Beitrag der Beispielcode in diesem Link, das zeigt, wie es geht:

private Bitmap getImageBitmap(String url) { 
    Bitmap bm = null; 
    try { 
     URL aURL = new URL(url); 
     URLConnection conn = aURL.openConnection(); 
     conn.connect(); 
     InputStream is = conn.getInputStream(); 
     BufferedInputStream bis = new BufferedInputStream(is); 
     bm = BitmapFactory.decodeStream(bis); 
     bis.close(); 
     is.close(); 
    } catch (IOException e) { 
     Log.e(TAG, "Error getting bitmap", e); 
    } 
    return bm; 
} 

ich diesen Code nicht getestet haben, bin ich einfach paranoid und gerne sicherstellen, dass SO Antworten nützlich sind, auch wenn jede andere Seite im Netz verschwindet :-)

0

Zuerst sollten Sie das Bild herunterladen und speichern Sie es in Ihrem device(sdcard or memory). Dann erhalten Sie seinen Dateipfad, mit Uri.parse(filePath), um den Pfad zu uri schließlich konvertieren, rufen Sie ImageView 's setImageURI(Uri) zu erfüllen. - Ich benutze diesen Weg, um meinen Zweck zu erreichen, und es gibt einen Fehler: Wenn das Bild zu groß ist (vielleicht 1 MB oder so überschreiten, kann es OutOfMemeroy Ausnahme melden !!!)