2010-12-28 45 views
40

Quiero cargar un html local en un WebView SIN usar "file: ///" porque eso no permite las cookies. ¿Hay alguna manera de usar algo como "localhost"?¿Cargar html local en WebView?

En segundo lugar, no pude encontrar una manera activa las cookies en los getSettings(). Porque las cookies no están permitidas mientras se usa "file: ///".

Respuesta

95

Sólo se puede hacer algo por el estilo. Este código HTML carga de solución a partir de una variable de cadena:

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: tratar de establecer el primer parámetro (el URLbase) de loadDataWithBaseURL() para sus necesidades

+1

@ user113215: pero ha leído el enlace de documentación para el método loadDataWithBaseURL(), ¿no? el 4to argumento se llama "codificación", así que llamé a la variable "codificación" ... como se puede ver aquí se usa para el juego de caracteres de salida: http://myexperiencewithandroid.blogspot.de/2011/09/android-loaddatawithbaseurl .html ... también debería leer esto: http://en.wikipedia.org/wiki/Character_encoding ... así que no veo su problema. –

+0

pero no (datos) esquema se utiliza aquí en el ejemplo, sólo se carga de datos local HTML que se debe mostrar en la vista Web: "Si la URL base utiliza el esquema de datos, este método es equivalente a llamar loadData() y el HistoryURL es ignorado ". –

+1

Ah, esto es confuso. Investigué la fuente de Android y estás en lo cierto. El uso de este método con el 'datos:' resultados esquema de URL en una llamada a 'nativeLoadUrl()' (donde 'encoding' denota Base64 o codificación URL), pero por lo demás este método da como resultado una llamada a' nativeLoadData() '(donde 'codificación' denota conjunto de caracteres). – user113215

4

Si desea acceder a localhost a través del Android, es necesario use http://10.0.2.2:35643/ donde 35643 es el puerto específico, si es necesario.

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

Bonito fragmento de código, solo falta la definición 'String javascrips;'. –

+0

javascrips es cualquier texto de archivos html. como ... –

+0

estoy tomando este paso extra. webview.loadUrl ("file: ///android_res/raw/help.html"); – wjl

0

El siguiente código funcionó para mí.

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

Pruebe este código. Esto funciona para mi.

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

¿Cuál es 'mDesc' Esta respuesta es inútil sin él. – Supuhstar

+0

@Supuhstar Gracias por su atención. "mDesc" es webview. Edité mi código. –

Cuestiones relacionadas