لماذا لا يتمكن برنامج WebView على فتح بعض عناوين URL المحلية (Android)؟

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

  •  19-09-2019
  •  | 
  •  

سؤال

انا املك WebView أنني أستخدم لفتح بعض الملفات المخزنة في assets/ دليل مشروعي. إنه يعمل بشكل جيد لمعظم الملفات، ولكن هناك واحد على وجه الخصوص (وأنا متأكد من أن الآخرين لم أجد) أنه فقط سوف لن افتح.

الملف الذي أواجه مشاكل معه هو اسمه:

"assets/ContentRoot/Photos/XXX Software Logo - jpg - 75%.JPG"

عندما اجتيازها WebView, ، ويظهر صفحة الخطأ، فهو يظهر ذلك على النحو التالي:

"file:///android_asset/ContentRoot/Photos/XXX%20Software%20Logo%20-%20jpg%20-%2075%.JPG"

ثم حاولت الجري URLEncoder.encode() على ذلك وحصلت على صفحة الخطأ مع عنوان URL الذي تم تقديمه على النحو التالي:

"file:///android_asset/ContentRoot/Photos/XXX+Software+Logo+-+jpg+-+75%.JPG"

لم يتمكن أي من هذه العناوين URL من فتح الملف (ويبدو كلاهما بخير بالنسبة لي). هل لدي احد اى افكار؟

تحديث: إذا قمت بتشفير % باليد (باستخدام %25, ، كما اقترح commonsware.com) ثم تحميل الصورة، ولكنه يحاول تحليلها كنص، وليس كصورة، لذلك أنا فقط أحصل على الكثير من القمامة (أساسا).

Hosted by imgur.com

أيضا، في إشارة إلى الصورة في مستند HTML مع عنوان URL النسبي لا يعمل (ربما لأنه لا يتم تحليله كصورة؟):

<img src="../Photos/XXX%20Software%20Logo%20-%20jpg%20-%2075%.JPG" />
<img src="../Photos/XXX%20Software%20Logo%20-%20jpg%20-%2075%25.JPG" />
هل كانت مفيدة؟

المحلول

حسنا، بعد إنفاق الطريق لفترة طويلة جدا، لقد اكتشفت ما يجري. أساسا، إذا الصور المخزنة في assets/ يحتوي الدليل على مساحة (على سبيل المثال، ") في اسم الملف الخاص بهم، فلن يقوموا بتقديم صور.

myWebView.loadUrl("file:///android_asset/testimage.jpg");

يعمل بشكل جيد. لكن،

myWebView.loadUrl("file:///android_asset/test+image.jpg");

فقط يلقي خطأ غير وجد و

myWebView.loadUrl("file:///android_asset/test image.jpg");
// and
myWebView.loadUrl("file:///android_asset/test%20image.jpg");

إظهار أنه عرض بشكل غير صحيح (كنص ... شاهد لقطة شاشة في السؤال).

هذا السلوك غير المتوقع موجود على (على الأقل) 1.5 و 1.6 و 2.0 وأنا قدم تقرير الأخطاء.

نصائح أخرى

حاول التخلص من % في اسم الملف. أو، الهروب من ذلك %25.

وأعتقد أن WebView يفهم فقط أنواع المحتوى ذات الصلة النص حتى يعالج بإخلاص JPG الخاص بك كتشفير Base64، ورمز فك التشفير وعي الناتج عن Gobble-Goop كنص. لا أعرف حقا ما إذا كان من الممكن ضبط نوع المحتوى الخاص بربيا WebView ولكن كحل مؤقت، يمكنك محاولة رمي علامة IMG داخل علامة HTML وتحميل الصفحة. ربما يمكنك أيضا استخدام WebView # LoadDataWithBaseurl

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