Android WebView के साथ मौजूदा .html फ़ाइल लोड हो रही है


86

मैंने Google कोड और अन्य संसाधनों से नमूने, डेमो की कोशिश की WebView , लेकिन जब मैं इसे अपने कोड में करने की कोशिश करता हूं, तो यह मेरे लिए काम नहीं करता है।

मैं myfile.htmlजो मैं संपत्ति फ़ोल्डर में डाल लोड करना चाहते हैं , और उपयोग:

private WebView myWebView;

myWebView.loadUrl("file:///android_assets/myfile.html");

एमुलेटर पर त्रुटि दिखाई देती है

पर वेब पेज file:///android_assets/myfile.htmlलोड नहीं किया जा सकता है: अनुरोधित फ़ाइल नहीं मिली। /android_assets/myfile.html

जब मैंने उस फ़ाइल को res/raw/फ़ोल्डर में रखा और उपयोग किया:

myWebView.loadUrl("file:///android_res/raw/myfile.html");

तब केवल एमुलेटर एंड्रॉइड 2.2 एपीआई स्तर 8 शायद फ़ाइल को लोड कर सकता है, अन्य पुराने संस्करण समान त्रुटि दिखाते हैं। क्या मैं कुछ भूल रहा हूँ?

क्या एप्लिकेशन पैकेज में मौजूदा। Html फ़ाइल लोड करने का कोई तरीका है जो सभी एपीआई संस्करणों पर काम करता है?

जवाबों:


161

ठीक है, यह मेरी बहुत बेवकूफाना गलती थी। मैं जवाब यहाँ पोस्ट करता हूँ बस अगर किसी को एक ही समस्या है।

संपत्ति फ़ोल्डर में संग्रहीत फ़ाइलों के लिए सही रास्ता है file:///android_asset/* ( कोई "एस" के साथ जो मैं हमेशा सोच रहा था कि यह "एस" होना चाहिए)।

तथा, mWebView.loadUrl("file:///android_asset/myfile.html"); सभी एपीआई स्तरों के तहत काम करता है।

मुझे अभी भी यह पता नहीं है कि mWebView.loadUrl("file:///android_res/raw/myfile.html");केवल एपीआई स्तर 8 पर ही काम क्यों होता है। लेकिन यह अब मायने नहीं रखता।


50
FWIW मुझे नहीं लगता कि यह एक बेवकूफ गलती थी। मैंने अब वही गलती की, दो बार। यह सहज नहीं है! पहले "संपत्ति" नामक एक फ़ोल्डर बनाएं, फिर "android_asset" (कोई "s") द्वारा इसका संदर्भ लें ?? यह वह मंच है जो बेवकूफ है, IMO: P
richtaur

3
बुरा rawकाम नहीं किया। मैं के लिए इस्तेमाल होता है raw-de, raw-frऔर इतने पर। अब मुझे इसे स्वयं करना है।
मार्टिन

मैंने laph द्वारा निर्देशित उसी तरह की कोशिश की, लेकिन जब मैंने अपने xml फ़ाइल को आपके द्वारा बताए गए myWebView.loadUrl ("फ़ाइल: ///android_res/raw/myfile.xml") में डाला; यह मुझे त्रुटि देता है कि सुनिश्चित करें कि इंटरनेट या पथ सही है और जब मैं myWebView.loadUrl ("फ़ाइल: //android_res/raw/myfile.xml") लिखता हूं; यह कोई त्रुटि नहीं देता है लेकिन यह कुछ भी नहीं दिखाता है। कृपया इसमें मेरी मदद करें।
आदित्य १५१०

2
हाय आदित्य, मेरा मानना ​​है कि त्रुटि है क्योंकि आपकी फ़ाइल .xml है। loadUrl एक .html फ़ाइल लोड करने के लिए लगता है। कृपया मुझे सुधारें अगर मैं गलत हूं।
23

क्या यह संभव है? फ़ोल्डर एसेट्स में जावास्क्रिप्ट और अन्य फाइलें होती हैं, फ़ोल्डर रेस / रॉ में HTML फाइलें होती हैं
user2422690

17

अपने। folder फ़ाइल को अपने प्रोजेक्ट फ़ोल्डर की संपत्ति फ़ोल्डर में पेस्ट करें। और फोल कोड के साथ लेआउट फोल्डर में एक xml फाइल बनाएं: my.xml:

<WebView  xmlns:android="http://schemas.android.com/apk/res/android"
  android:id="@+id/webview"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
    />

गतिविधि में फ़ॉल कोड जोड़ें

setContentView(R.layout.my);
    WebView mWebView = null;
    mWebView = (WebView) findViewById(R.id.webview);
    mWebView.getSettings().setJavaScriptEnabled(true);
    mWebView.loadUrl("file:///android_asset/new.html"); //new.html is html file name.

16

यदि आपकी संरचना इस प्रकार होनी चाहिए:

/assets/html/index.html

/assets/scripts/index.js

/assets/css/index.css

तो बस करो ( Android WebView: अभिविन्यास परिवर्तन से निपटने )

    if(WebViewStateHolder.INSTANCE.getBundle() == null) { //this works only on single instance of webview, use a map with TAG if you need more
        webView.loadUrl("file:///android_asset/html/index.html");
    } else {
        webView.restoreState(WebViewStateHolder.INSTANCE.getBundle());
    }

सुनिश्चित करें कि आप जोड़ते हैं

    WebSettings webSettings = webView.getSettings();
    webSettings.setJavaScriptEnabled(true);
    webSettings.setJavaScriptCanOpenWindowsAutomatically(true);
    if(android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN) {
        webSettings.setAllowFileAccessFromFileURLs(true);
        webSettings.setAllowUniversalAccessFromFileURLs(true);
    }

फिर सिर्फ उरलों का उपयोग करें

<html>
<head>
    <meta charset="utf-8">
    <title>Zzzz</title>
    <script src="../scripts/index.js"></script>
    <link rel="stylesheet" type="text/css" href="../css/index.css">

6

अपने प्रोजेक्ट की संपत्ति फ़ोल्डर में अपनी .html फ़ाइल को कॉपी और पेस्ट करें और onCreate () पर अपनी गतिविधि में नीचे कोड जोड़ें।

        WebView view = new WebView(this);
        view.getSettings().setJavaScriptEnabled(true);
        view.loadUrl("file:///android_asset/**YOUR FILE NAME**.html");
        view.setBackgroundColor(Color.TRANSPARENT);
        setContentView(view);

यह ट्रिपल स्लैश था जो मुझे ///
मार्क

2

आप HTML फ़ाइल को मैन्युअल रूप से पढ़ सकते हैं और फिर उसे दिखाने के लिए WebView के तरीकों loadDataया loadDataWithBaseUrlतरीकों का उपयोग कर सकते हैं।


हाय ल्यूको, आपके उत्तर के लिए धन्यवाद। आप का मतलब है कि मुझे अपनी .html फ़ाइल को स्ट्रिंग में बदलना है, फिर इसे लोडडटा या लोडडाउटविथबेसिअब्लिक विधि से लोड करें?
laph

2
मेरी। html फाइलें स्ट्रिंग में जल्दी से कन्वर्ट करने के लिए काफी बड़ी हैं। पूर्ण पथ के साथ इसे लोड करने के लिए कोई विचार?
laph

2

डिबग संकलन से अलग है रिहाई एक है, तो:

अपनी प्रोजेक्ट फ़ाइल संरचना पर विचार करें जैसे कि [ यह मामला यदि डिबग असेंबल के लिए है ]:

src
  |
  debug
      |
      assets
           |
           index.html

आपको अपने WebView में index.html को कॉल करना चाहिए :

web.loadUrl("file:///android_asset/index.html");

तो आगे, रिलीज के लिए इकट्ठा, यह इस तरह होना चाहिए:

src
  |
  release
        |
        assets
             |
             index.html

शारीरिक संरचना भी काम करती है, दोनों संकलन [ डिबग और रिलीज़ ] के लिए:

src
  |
  main
     |
     assets
          |
          index.html
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.