Android FileNotFound Eccezione - non può getInputStream da URL dell'immagine che non ha formato di file
-
26-09-2019 - |
Domanda
Il titolo è piuttosto auto esplicativo.
il seguente codice ...:
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();
}
fallirà se l'URL non contiene il formato di file. Ad esempio, alcune immagini ospitate da Google visualizzerà ancora l'immagine non avere il formato del file (.png, .jpg, ecc) come parte dell'URL.
Di conseguenza, il tipo di contenuto intestazione del URL rendimenti di connessione "text / html". Credo che questo sia il problema.
Ho provato a fissare un nuovo header Content-Type, ma quello non sembra cambiare nulla.
Qualcuno sa una soluzione?
Grazie.
Soluzione
I correva in problemi e mi ricordai googling intorno e questa era la mia soluzione finale
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);
}
Altri suggerimenti
BitmapFactory.decodeStream
legge solo il flusso di byte cruda dell'immagine stessa, non ha alcuna conoscenza circa l'URL né la codifica del contenuto, quindi non credo che siano colpa qui. Dovrebbe essere in grado di leggere il formato dell'immagine direttamente dal nell'intestazione dell'immagine.
Probabilmente l'URL viene reindirizzato.