Android WebView ile mevcut .html dosyasını yükleme


88

Google kodlarından örnekler, demolar ve diğer kaynaklarla WebViewdenedim, ancak bunu kendi kodumda yapmaya çalıştığımda işe yaramıyor.

myfile.htmlVarlıklar klasörüne koyduğum şeyi yüklemek ve şunu kullanmak istiyorum:

private WebView myWebView;

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

Emülatörde hata gösteriyor

Adresindeki web sayfası şu file:///android_assets/myfile.htmlşekilde yüklenemedi: İstenen dosya bulunamadı. /android_assets/myfile.html

Bu dosyayı res/raw/klasöre koyduğumda ve şunu kullandığımda:

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

daha sonra sadece emülatör android 2.2 API seviyesi 8 muhtemelen dosyayı yükleyebilir, diğer eski sürümler aynı hatayı gösterir. Bir şey mi kaçırıyorum?

Tüm API sürümlerinde çalışan uygulama paketinde mevcut bir .html dosyasını yüklemenin herhangi bir yolu var mı?

Yanıtlar:


162

Tamam, bu benim çok aptalca hatamdı. Birisinin aynı problemi olması durumunda cevabı buraya gönderiyorum.

Varlıklar klasöründe depolanan dosyalar için doğru yol file:///android_asset/*(her zaman "s" olması gerektiğini düşündüğüm varlıklar klasörü için "s" yok) şeklindedir.

Ve mWebView.loadUrl("file:///android_asset/myfile.html");tüm API seviyelerinde çalışır.

Hala neden mWebView.loadUrl("file:///android_res/raw/myfile.html");sadece API seviyesi 8'de çalıştığını anlamıyorum . Ama şimdi önemi yok.


50
FWIW Bunun aptalca bir hata olduğunu düşünmüyorum. Şimdi aynı hatayı iki kez yaptım. Sezgisel değil! Önce "varlıklar" adında bir klasör oluşturun ve buna "android_asset" ("s" yok) ile bakın ?? Aptal olan platform, IMO: P
richtaur

3
kötü rawişe yaramadı. İçin kullanacağım raw-de, raw-frvb. Şimdi kendim yapmalıyım.
Martin

laph tarafından yönlendirilen aynı yolu denedim ama xml dosyamı sizin belirttiğiniz klasöre koyduğumda myWebView.loadUrl ("file: ///android_res/raw/myfile.xml"); İnternet veya yolun doğru olduğundan emin olun ve myWebView.loadUrl ("file: //android_res/raw/myfile.xml") yazdığımda bana hata veriyor; herhangi bir hata vermez ama aynı zamanda hiçbir şey göstermez.Lütfen bu konuda bana yardım edin.
Aditya1510

2
Merhaba Aditya, bu hatanın dosyanızın .xml olması nedeniyle olduğuna inanıyorum. loadUrl'nin bir .html dosyası yüklemesi gerektiğini varsayalım. Yanılıyorsam lütfen beni düzeltin.
laph

Mümkün mü? Klasör varlıkları Javascript ve diğer dosyaları içerir, res / raw klasörü HTML dosyalarını içerir
user2422690

18

Yapınız böyle olmalıysa:

/assets/html/index.html

/assets/scripts/index.js

/assets/css/index.css

Ardından yapın ( Android Web Görünümü: yön değişikliklerini işleme )

    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());
    }

Eklediğinizden emin olun

    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);
    }

O zaman sadece url'leri kullanın

<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">

17

.html dosyanızı proje klasörünüzün varlıklar klasörüne yapıştırın. ve yerleşim klasöründe şu fol koduyla bir xml dosyası oluşturun: 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"
    />

fol kodunu aktiviteye ekle

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.

6

.Html dosyanızı Projenizin varlıklar klasörüne kopyalayıp yapıştırın ve onCreate () üzerindeki Aktivitenize aşağıdaki kodu ekleyin.

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

beni elde eden üçlü eğik çizgiydi ///
Marc

2

El ile html dosyasını okumak ve sonra kullanabilir loadDataveya loadDataWithBaseUrlWebView'da yöntemleri göstermek diyelim.


Merhaba Lucho, cevabınız için teşekkürler. Yani .html dosyamı String'e dönüştürmem ve ardından loadData veya loadDataWithBaseUrl yöntemiyle yüklemem gerektiğini mi söylüyorsunuz?
laph

2
.html dosyalarım hızla dizeye dönüştürmek için oldukça büyük. Mutlak yolla yükleme fikriniz var mı?
laph

2

Ayıklama derleme farklı salım yüzden, one:

Proje dosya yapınızı şu şekilde düşünün [ bir Hata Ayıklama derlemesi için bu durum ]:

src
  |
  debug
      |
      assets
           |
           index.html

Sen çağırmalıdır index.html gibi WebView'da içine:

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

Dolayısıyla, Sürüm montajı için şöyle olmalıdır:

src
  |
  release
        |
        assets
             |
             index.html

Aşağıdaki yapı, her iki derleme için de çalışır [ hata ayıklama ve yayınlama ]:

src
  |
  main
     |
     assets
          |
          index.html
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.