2010-10-26 5 views
68

Ho provato campioni, demo dai codici Google e altre risorse con WebView, ma quando provo a farlo nel mio codice, non funziona per me.Caricamento del file .html esistente con Android WebView

voglio caricare myfile.html che ho messo nella cartella Assets, e l'utilizzo di:

private WebView myWebView; 

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

sull'emulatore mostra errore

La pagina web all'indirizzo file:///android_assets/myfile.html non poteva essere caricato come: La richiesto il file non è stato trovato. /android_assets/myfile.html

Quando ho messo quel file per res/raw/ cartella e utilizzando:

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

allora solo emulatore di Android 2.2 Livello API 8 può caricare il file, probabilmente, altre versioni più vecchie mostrano lo stesso errore. Mi sto perdendo qualcosa?

Esiste un modo per caricare un file .html esistente nel pacchetto dell'applicazione che funziona su tutte le versioni API?

+0

Siamo spiacenti, posta sbagliato. – user2422690

risposta

137

ok, quello è stato il mio stupido errore. Inserisco la risposta qui nel caso qualcuno abbia lo stesso problema.

Il percorso corretto per i file archiviati nella cartella delle risorse è file:///android_asset/* (senza "s" per la cartella delle risorse in cui ho sempre pensato che fosse necessario "s").

E, mWebView.loadUrl("file:///android_asset/myfile.html"); funziona con tutti i livelli API.

Non riesco ancora a capire perché mWebView.loadUrl("file:///android_res/raw/myfile.html"); funziona solo su livello API 8. Ma non importa ora.

+44

FWIW Non penso sia stato uno stupido errore. Ho fatto lo stesso errore ora, due volte. Non è intuitivo! Prima di tutto fai una cartella chiamata "assets" quindi fai riferimento ad essa con "android_asset" (no "s") ?? È la piattaforma che è stupida, IMO: P – richtaur

+1

a raw 'raw' non ha funzionato. Avrei usato per 'raw-de',' raw-fr' e così via. Ora devo farlo da solo. – Martin

+0

ho provato lo stesso modo guidato da laph ma quando ho messo il mio file xml nella cartella menzionata da te myWebView.loadUrl ("file: ///android_res/raw/myfile.xml"); Mi dà errore che Assicurati che internet o path siano corretti e quando scrivo myWebView.loadUrl ("file: //android_res/raw/myfile.xml"); non dà alcun errore ma mostra anche nulla. Per favore aiutatemi in questo. – Aditya1510

1

È possibile leggere manualmente il file html e quindi utilizzare i metodi loadData o loadDataWithBaseUrl di WebView per visualizzarlo.

+0

Ciao Lucho, grazie per la tua risposta. Significa che devo convertire il mio file .html in String, quindi caricarlo con il metodo loadData o loadDataWithBaseUrl? – laph

+1

I miei file .html sono abbastanza grandi da convertire rapidamente in stringa. Hai qualche idea di caricarlo con un percorso assoluto? – laph

15

incollare il file .html nella cartella delle risorse della cartella del progetto. e creare un file xml nella cartella di layout con il codice fol: 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" 
    /> 

aggiungere il codice fol nell'attività

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

Copiare e incollare il file HTML nella cartella di asset il tuo progetto e aggiungi il codice seguente nella tua attività su 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); 
7

Se la struttura dovrebbe essere come questo:

/assets/html/index.html

/assets/scripts/index.js

/assets/css/index.css

Poi basta fare (Android WebView: handling orientation changes)

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

Assicurati di aggiungere

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

Poi basta usare URL

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

Assicurarsi inoltre di non dimenticare:

<uses-permission android:name="android.permission.INTERNET" />

+1

È locale ... non ha bisogno di aggiungere '' non accede a Internet ... –

+0

il suo lavoro da me ,,,, ,, quando proviamo a caricare l'immagine url da caricare il file html throgh Webview poi complasary aggiungere questo permesso –