2010-12-28 23 views
40

Voglio caricare un html locale in una WebView senza usare "file: ///" perché non consente i cookie. C'è un modo per usare qualcosa come "localhost"?Carica local html in WebView?

In secondo luogo, non ho trovato un modo per abilitare i cookie in getSettings(). Perché i cookie non sono consentiti durante l'utilizzo di "file: ///".

risposta

95

Si può fare solo qualcosa del genere. Questa soluzione di carico HTML da una variabile String:

String html = "<html><body>Hello, World!</body></html>"; 
String mime = "text/html"; 
String encoding = "utf-8"; 

WebView myWebView = (WebView)this.findViewById(R.id.myWebView); 
myWebView.getSettings().setJavaScriptEnabled(true); 
myWebView.loadDataWithBaseURL(null, html, mime, encoding, null); 

EDIT: cercare di impostare il primo parametro (il baseURL) di loadDataWithBaseURL() per le vostre esigenze

+1

@ user113215: ma avete letto il collegamento della documentazione per il metodo loadDataWithBaseURL(), non è vero ?? il 4o argomento è chiamato "encoding", quindi ho chiamato la variabile "encoding" ... come potete vedere qui è usata per il set di caratteri di output: http://myexperiencewithandroid.blogspot.de/2011/09/android-loaddatawithbaseurl .html ... dovresti anche leggere questo: http://en.wikipedia.org/wiki/Character_encoding ... quindi non vedo il tuo problema. –

+0

ma nello schema non viene utilizzato alcuno schema (dati), vengono caricati solo i dati HTML locali che dovrebbero essere visualizzati in WebView: "Se l'URL di base utilizza lo schema di dati, questo metodo equivale a chiamare loadData() e historyUrl è ignorato. " –

+1

Ah, questo è confuso. Ho studiato la fonte Android e tu hai ragione. Usando questo metodo con lo schema 'data:' URL si ottiene una chiamata a 'nativeLoadUrl()' (dove 'encoding' indica Base64 o encoding URL), altrimenti questo metodo comporta una chiamata a' nativeLoadData() '(dove 'encoding' denota il set di caratteri). – user113215

4

Se si desidera accedere localhost attraverso l'Android, è necessario utilizzare http://10.0.2.2:35643/ dove 35643 è la porta specifica, se necessario.

13
public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     WebView view = (WebView) findViewById(R.id.webView1); 
     try { 
     InputStream input = getResources().openRawResource(R.raw.lights); 
     Reader is = new BufferedReader(
       new InputStreamReader(input, "windows-1252")); 


      //InputStream input = getAssets().open("ws.TXT"); 
      int size; 
      size = input.available(); 
      byte[] buffer = new byte[size]; 
      input.read(buffer); 
      input.close(); 
      // byte buffer into a string 
      javascrips = new String(buffer); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     // String html = readFile(is); 

     view.loadDataWithBaseURL("file:///android_res/raw/", javascrips, "text/html", 
       "UTF-8", null); 
    } 
+0

Nice snippet of code, manca solo la definizione 'String javascrips;'. –

+0

javascrips è qualsiasi testo di file html. come ... –

+0

Sto prendendo questo passo in più. webview.loadUrl ("file: ///android_res/raw/help.html"); – wjl

0

Il seguente codice ha funzionato per me.

String base64EncodedString = null; 
         try { 
          base64EncodedString = android.util.Base64.encodeToString((preString+mailContent.getBody()+postString).getBytes("UTF-8"), android.util.Base64.DEFAULT); 
         } catch (UnsupportedEncodingException e1) { 
          // TODO Auto-generated catch block 
          e1.printStackTrace(); 
         } 
         if(base64EncodedString != null) 
         { 
          wvMailContent.loadData(base64EncodedString, "text/html; charset=utf-8", "base64"); 
         } 
         else 
         { 
          wvMailContent.loadData(preString+mailContent.getBody()+postString, "text/html; charset=utf-8", "utf-8"); 
9

Prova questo codice. Per me funziona.

WebView mDesc = findViewById(R.id.descWv); 
WebSettings settings = mDesc.getSettings(); 
settings.setDefaultTextEncodingName("utf-8"); 
mDesc.loadData(mDescText, "text/html; charset=utf-8",null); 
+0

Che cos'è 'mDesc'? Questa risposta è inutile senza di esso – Supuhstar

+0

@Supuhstar Grazie per l'attenzione. "mDesc" è la vista Web. Ho modificato il mio codice. –

Problemi correlati