Android FileNotFound Exception - ne peut pas getInputStream d'URL de l'image qui ne possède pas le format de fichier
-
26-09-2019 - |
Question
Le titre est assez explicite.
le code suivant ...:
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();
}
échouera si l'URL ne contient pas le format de fichier. Par exemple, certaines images hébergées par Google affiche l'image mais pas le format de fichier (.png, .jpg, etc.) dans le cadre de l'URL.
En conséquence, l'en-tête de type de contenu des retours de connexion url "text / html". Je crois que c'est la question.
J'ai essayé d'installer un nouvel en-tête de type de contenu, mais cela ne semble rien de changement.
Quelqu'un sait-il une solution de contournement?
merci.
La solution
je courais dans les problèmes et je me suis souvenu googler autour et ce fut ma solution 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);
}
Autres conseils
BitmapFactory.decodeStream
ne lit que le flux d'octets brut de l'image elle-même, elle n'a pas connaissance de l'URL, ni le codage de contenu, donc je ne pense pas qu'ils sont en faute. Il devrait être capable de lire le format d'image directement à partir de l'en-tête d'image.
Probablement l'URL est redirigé.