3

Der Titel ist ziemlich selbsterklärend.Android FileNotFound Exception - Kann nicht GetInputStream von Bild URL, die nicht über Dateiformat

der folgende Code ...:

URL imageUrl = new URL(url); 
    try { 
       HttpURLConnection conn= (HttpURLConnection)imageUrl.openConnection(); 
       conn.setDoInput(true); 
       conn.connect(); 
       int length = conn.getContentLength(); 
       InputStream is = conn.getInputStream(); 
       return BitmapFactory.decodeStream(is); 
      } catch (IOException e) { 
      e.printStackTrace(); 
      } 

wird scheitern, wenn die URL das Dateiformat nicht enthält. Einige von Google gehostete Bilder zeigen beispielsweise das Bild an, haben aber nicht das Dateiformat (.png, .jpg usw.) als Teil der URL.

Als Ergebnis gibt der Content-Type-Header der URL-Verbindung "text/html" zurück. Ich glaube, das ist das Problem.

Ich habe versucht, eine neue Content-Type-Header, aber das scheint nichts zu ändern.

Kennt jemand einen Workaround?

danke.

+0

Können Sie ein Beispiel-URL geben, die nicht funktioniert? –

Antwort

7

ich in Probleme laufen und ich um erinnerten googeln und dies war meine letzte Lösung

 try { 
      URL url = new URL(imageUrl); 
      HttpGet httpRequest = null; 

      httpRequest = new HttpGet(url.toURI()); 

      HttpClient httpclient = new DefaultHttpClient(); 
      HttpResponse response = (HttpResponse) httpclient.execute(httpRequest); 

      HttpEntity entity = response.getEntity(); 
      BufferedHttpEntity bufHttpEntity = new BufferedHttpEntity(entity); 
      InputStream input = bufHttpEntity.getContent(); 

      Bitmap bitmap = BitmapFactory.decodeStream(input); 

      ImageActivity.this.i.setImageBitmap(bitmap); 
      ImageActivity.this.i.refreshDrawableState(); 
      input.close(); 

     } catch (MalformedURLException e) { 
      Log.e("ImageActivity", "bad url", e); 
     } catch (Exception e) { 
      Log.e("ImageActivity", "io error", e); 
     } 
+0

das war die Lösung! Danke Aaron! Ich kann mir vorstellen, dass das Update funktioniert, weil Apaches HttpGet-, HttpClient-, HttpResponse- und HttpEntity-Objekte verwendet wurden. Diese lösten das HttpUrlConnection-Objekt ab und behandeln offensichtlich einige Dinge besser. Ich bin nicht sehr vertraut mit der BufferedHttpEntity, aber das hat wahrscheinlich auch eine große Sache damit zu tun. – reliks

+0

danke Aaron..es funktioniert gut für mich – CoDe

+0

Thanx Aron. es funktionierte für mich –

0

BitmapFactory.decodeStream liest nur den RAW-Byte-Stream des Bildes selbst, es hat keine Kenntnis über die URL noch die Inhaltscodierung, also glaube ich nicht, dass sie hier schuld sind. Es sollte in der Lage sein, das Bildformat direkt aus dem Bildkopf zu lesen.

Wahrscheinlich wird die URL umgeleitet.