استثناء Android FileNotfound - لا يمكن الحصول على url من عنوان URL الذي لا يحتوي على تنسيق ملف
-
26-09-2019 - |
سؤال
العنوان هو توضيح ذاتي جدا.
الرمز التالي ...:
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();
}
سيفشل إذا لم يكن عنوان URL يحتوي على تنسيق الملف. على سبيل المثال ، ستعرض بعض الصور التي استضافتها Google الصورة ، ولكن ليس لديها تنسيق الملف (.png ، .jpg ، إلخ) كجزء من عنوان URL.
نتيجة لذلك ، يرجع رأس نوع المحتوى لاتصال URL "Text/HTML". أعتقد أن هذه هي القضية.
لقد حاولت تعيين رأس جديد من نوع المحتوى ، لكن هذا لا يبدو أنه يغير أي شيء.
أي شخص يعرف الحل؟
شكرًا.
المحلول
كنت أواجه مشكلات وتذكرت غوغلينغ وكان هذا هو الحل الأخير
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);
}
نصائح أخرى
BitmapFactory.decodeStream
يقرأ فقط دفق البايت الخام للصورة نفسها ، وليس لديه أي معرفة بعنوان URL أو ترميز المحتوى ، لذلك لا أعتقد أنهم على خطأ هنا. يجب أن يكون قادرًا على قراءة تنسيق الصورة مباشرة من رأس الصورة.
ربما يتم إعادة توجيه عنوان URL.
لا تنتمي إلى StackOverflow