استثناء Android FileNotfound - لا يمكن الحصول على url من عنوان URL الذي لا يحتوي على تنسيق ملف

StackOverflow https://stackoverflow.com/questions/4218807

سؤال

العنوان هو توضيح ذاتي جدا.

الرمز التالي ...:

    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.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top