2012-07-24 26 views
7

Puedo mostrar el contenido del archivo HTML en la vista web de android. Ahora cómo puedo pasar el parámetro al archivo HTML.Por ejemplo, mi contenido HTML tiene un reproductor de video que necesito pasar dinámicamente valores (URL) en el archivo HTML para reproducir video dinámico. Mi archivo HTML se encuentra en la carpeta de activos. ¿Cómo podría hacer esto?Cómo pasar el parámetro a un archivo HTML de android

Gracias.

+0

http://stackoverflow.com/q/11614456/1012284 –

Respuesta

4

En lugar de pasar directamente a la URL del video (que el siguiente ejemplo), habría utilizado fichas en el archivo HTML. Por ejemplo:

<embed src="$VIDEO_URL$" autostart="false" /> 

donde el $VIDEO_URL$ será el símbolo wich será reemplazado durante el tiempo de ejecución con un video real de URL.

Además, dado que no se puede cambiar el contenido de la carpeta de recursos en tiempo de ejecución que debe cargar el contenido del archivo html en una cadena variable y utilizar el método replace para reemplazar el token con un verdadero URL y, finalmente, pasar a esa cadena de tu vista web Algo como esto:

//The html variable has the html contents of the file stored in the assets folder 
//and real_video_url string variable has the correct video url 
html = html.replace("$VIDEO_URL$", real_video_url); 
webview.loadData(html, "text/html", "utf-8"); 
+0

flashvars var = {\t src: "Mi URL Sorce" \t \t \t \t \t \t, \t autoPlay: verdadera \t \t \t, \t controlBarAutoHide: falsa \t \t \t \t}; Esta es mi línea de src en mi HTML. ¿Puedo reemplazar de esta manera "html = html.replace (" src ", real_video_url); " – sanjay

+0

En su caso, si obtuve esto correctamente, debe usar 'html = html. replace ("My Sorce URL", real_video_url); 'en lugar de' html = html.replace ("src", real_video_url); '. Solo tenga en cuenta que no tiene ninguna otra secuencia del token "My Sorce URL", ya que el método 'replace' reparará todas ellas en su html con los controles de la variable' real_video_url'. – Angelo

+0

He intentado tu camino. Pero cuando corro, muestra una pantalla negra (sin reproducción de video) ?? – sanjay

3

si me gustaría tener algo dinámico en mi HTML que tendría un html con partes dinámicas escritas de esta manera:

<B>%NAME%</B> 

entonces yo cargo mi HTML:

String template = Utils.inputStreamToString(assets.open("html/template.html")); 

continuación Luego reemplazaría todas las partes dinámicas con lo que quiero así:

String data = template.replaceAll("%NAME%", "Alice McGee"); 

¡entonces lo pasaría a mi webView!

WebView webView = new WebView(this); 
webView.loadDataWithBaseURL("file:///android_asset/html/", data, "text/html", "utf-8", null); 
+0

no puede importar Utilidades de clase? ¿Puedes decirme por favor dónde puedo obtener esto? – Google

1

aquí activos significa qué?

String template = Utils.inputStreamToString (assets.open ("html/template.html"));

+0

context.getAssets() –

7

Me encontré con este problema hoy, sin embargo, necesitaba esto para trabajar con codificación UTF-8, así que este era mi enfoque, espero que ayude a alguien y aclare algunas de las respuestas anteriores a esta pregunta.

HTML:

<html> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
    </head> 
    <body> 
     <h1>%ERR_TITLE%</h1> 
     <h2>%ERR_DESC%</h2> 
    </body> 
</html> 

Java:

String content = IOUtils.toString(getAssets().open("error.html")) 
    .replaceAll("%ERR_TITLE%", getString(R.string.error_title)) 
    .replaceAll("%ERR_DESC%", getString(R.string.error_desc)) 

mWebView.loadDataWithBaseURL("file:///android_asset/error.html", content, "text/html", "UTF-8", null); 

En cuanto a IOUtils: http://commons.apache.org/proper/commons-io/download_io.cgi

2

logré pasar variables de una manera diferente.

Mi problema es que cada vez que cambio a otra aplicación, cuando vengo a la aplicación web, la vista web se vuelve a cargar. Supongo que se debe a la siguiente línea en mi método onCreate(): myWebView.loadUrl(url); Tuve la idea de pasar estas variables de estado en la url, pero como saben, aún no es posible. Lo que hice fue guardar el estado de algunas variables usando onSaveInstanceState(Bundle outState) {...} y restaurarlas con onRestoreInstanceState(Bundle savedInstanceState){...}.

En el método onCreate después de configurar myWebView hice lo siguiente:

myWebView.setWebViewClient(new WebViewClient() { 
@Override 
public void onPageFinished(WebView view, String urlString) 
{ 
    Log.i("onPageFinished", "loadVariables("+newURL+")"); 
    if(newURL!="") 
     myWebView.loadUrl("javascript:loadVariables("+"\""+newURL+"\")"); 
} 

@Override 
public boolean shouldOverrideUrlLoading(WebView view, String url) { 
    view.loadUrl(url); 
    return true; 
} 
}); 

jsInterface = new JSInterface(this,myWebView); 
myWebView.addJavascriptInterface(jsInterface, "Android"); 

if (savedInstanceState != null) 
{ 
// retrieve saved variables and build a new URL 
newURL = "www.yoururl.com"; 
newURL +="?var1=" + savedInstanceState.getInt("key1"); 
newURL +="?var2=" + savedInstanceState.getInt("key2"); 
Log.i("myWebApp","NEW URL = " + newURL); 
} 
myWebView.loadUrl("www.yoururl.com"); 

Por lo tanto, lo que sucede es que primero me carga la página con la URL predeterminada (www.yoururl.com) y onPageFinished que llamo un nuevo método de javascript donde paso las variables. En Javascript loadVariables función tiene el siguiente aspecto:

function loadVariables(urlString){ 
    // if it is not the default URL 
    if(urlString!="www.yoururl.com") 
    { 
     console.log("loadVariables: " + urlString); 
     // parse the URL using a javascript url parser (here I use purl.js) 
     var source = $.url(urlString).attr('source'); 
     var query = $.url(urlString).attr('query'); 
     console.log("URL SOURCE = "+source + " URL QUERY = "+query); 
     //do something with the variables 
    } 
} 
Cuestiones relacionadas