如何从Java调用code Android原生的JavaScript函数 [英] How to call a JavaScript function from java code android native
问题描述
我需要加载它的内部有一些AJAX服务电话一个HTML文件。
我需要调用一个函数从Java code的HTML文件。
我可以看到网页,但不是在模拟器上的数据加载。
我的HTML文件小于
<!DOCTYPE HTML>
< HTML和GT;
< HEAD>
< META NAME =视口CONTENT =WIDTH =设备宽度,用户可扩展= YES>
<链路级=包括相对=样式类型=文/ CSS
HREF =./ jquery.jqplot.min.css/>
<链接类型=文/ CSS相对=样式
HREF =SyntaxHighlighter的/风格/ shCoreDefault.min.css/>
<链接类型=文/ CSS相对=样式
HREF =SyntaxHighlighter的/风格/ shThemejqPlot.min.css/><脚本类=包括类型=文/ JavaScript的
SRC =http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js>&下; /脚本>
< /头>
<身体GT;
<脚本类=包括类型=文/ JavaScript的
SRC =./ jquery.jqplot.min.js>< / SCRIPT>
<脚本类型=文/ JavaScript的
SRC =SyntaxHighlighter的/脚本/ shCore.min.js>< / SCRIPT>
<脚本类型=文/ JavaScript的
SRC =SyntaxHighlighter的/脚本/ shBrushJScript.min.js>< / SCRIPT>
<脚本类型=文/ JavaScript的
SRC =SyntaxHighlighter的/脚本/ shBrushXml.min.js>< / SCRIPT>
<! - 结束不要碰这个! - ><! - 额外的插件去这里 - ><脚本类=包括LANGUAGE =JavaScript的TYPE =文/ JavaScript的
SRC =./插件/ jqplot.dateAxisRenderer.min.js>< / SCRIPT>
<脚本类=包括LANGUAGE =JavaScript的TYPE =文/ JavaScript的
SRC =./插件/ jqplot.ohlcRenderer.min.js>< / SCRIPT>
<脚本类=包括LANGUAGE =JavaScript的TYPE =文/ JavaScript的
SRC =./插件/ jqplot.highlighter.min.js>< / SCRIPT>
<脚本类型=文/ JavaScript的SRC =./插件/ jqplot.dateAxisRenderer.min.js>< / SCRIPT>
<脚本类型=文/ JavaScript的SRC =./插件/ jqplot.canvasTextRenderer.min.js>< / SCRIPT>
<脚本类型=文/ JavaScript的SRC =./插件/ jqplot.canvasAxisTickRenderer.min.js>< / SCRIPT>
<脚本类型=文/ JavaScript的SRC =./插件/ jqplot.categoryAxisRenderer.min.js>< / SCRIPT>
<脚本类型=文/ JavaScript的SRC =./插件/ jqplot.barRenderer.min.js>< / SCRIPT>
<脚本类型=文/ JavaScript的SRC =./插件/ jqplot.cursor.min.js>< / SCRIPT>
<脚本类=code语言=JavaScript的类型=文/ JavaScript的>
VAR ARR = [];
变种ARR1 = [];
VAR jsonstr;
$(文件)。就绪(函数(){
$ .jqplot.config.enablePlugins = TRUE;
$(#状态),HTML(正在加载...);
$(#状态),动画({不透明:1,顶:200像素},200);
});
函数的getData(符号ID,时间轴,类型){
//$(\"#mydiv\").html(symbolId ++时间表++型); $阿贾克斯({
网址: 'http://83.101.141.1:8020/mTadawul/TadawulService.svc/GetOHLCData?Symbol='+symbolId+'&Char='+timeLine,
数据类型:JSON,
异步:假的,
成功:功能(数据){
jsonstr = jsontoarray(EVAL(数据));
/ *自定义code来检查数据* /
如果(数据!=)
{$(#状态),动画({不透明:0,上:-50px},200); createChart(类型,时间线);}其他{$(#状态),HTML(无数据); $(#状态。)动画({不透明:1,顶:200像素},200);} }
});
//$.getJSON('http://183.82.0.37:8080/TadawulWCFService/TadawulService.svc/GetOHLCData?Symbol=1010&Char='+timeLine,功能(数据){
//});
返回1;
} 功能jsontoarray(jsonstr){
变种arrayl = [];
对于(VAR I = 0; I< jsonstr.length;我++){
VAR值=新的Array();
值[0] = jsonstr [I] .TimeStamp.replace(T,).replace(纳米,);
值[1] = jsonstr [I]。开;
值[2] = jsonstr [I]。高;
值[3] = jsonstr [I]。低;
值[4] = jsonstr [I] .Close;
arrayl.push(值); }
返回arrayl;
}
功能createChart(类型,时间线){
时间表= typeof运算时间表!==未定义?时间表:'M';
的console.log(jsonstr);
变种图表= [{
名称:chart2
seriesDefaults:{
Y轴:'y2axis
},
轴:{
x轴:{
渲染:$ .jqplot.DateAxisRenderer,
numberTicks:36,
tickOptions:{
formatString的:%B%E%Y',
角度:-90
},
tickRenderer:$ jqplot.CanvasAxisTickRenderer,
labelOptions:{
fontFamily中:'宋体',
字体:14pt
},
将为labelRenderer:$ .jqplot.CanvasAxisLabelRenderer
},},
系列:[{
渲染:$ .jqplot.OHLCRenderer,
rendererOptions:{
烛台:真
}
}],
荧光笔:{
显示:真实,
showMarker:真实,
tooltipAxes:'XY',
yvalues:4,
formatString的:'<表类=jqplot-荧光笔> \\< TR>< TD>日期:LT; / TD>< TD>%S< / TD>< / TR> \\< TR>< TD>开:其中; / TD>< TD>%S< / TD>< / TR> \\< TR>< TD>高:其中; / TD>< TD>%S< / TD>< / TR> \\< TR>< TD>低压方面:< / TD>< TD>%S< / TD>< / TR> \\< TR>< TD>关闭:LT; / TD>< TD>%S< / TD>< / TR>< /表>'
},数据:[jsonstr]}];
如果(类型==线){
图表[0] .series [0] = {};
}
否则,如果(类型==栏){
图表[0] .series [0] = .rendererOptions顺利{:真正};
}其他
{
图表[0] .series [0] = .rendererOptions {烛台:真正};
}
如果(时间线=='H'){
图表[0] = .axes.xaxis.tickOptions {的formatString:'%B%E%#I%P',
角度:-90};
//charts[0].axes.xaxis['tickInterval'] =1小时;
}
$('#chart2')jqplot(图[0]); }< / SCRIPT>< DIV ID =mydiv>< / DIV>
<标签ID =LBL>< /标签>< DIV CLASS =测试的风格=的位置是:绝对的;顶部:-50px;左:40%;颜色:#333333;不透明:0; z-index的:9999; ID =状态>无数据< / DIV>
< DIV ID =chart2的风格=高度:400像素;宽度:720像素;>< / DIV>
在这code我需要调用的getData()从Java code传递3个参数。
我的Java code是如下:
webView.addJavascriptInterface(新JavaScriptInterface(本),机器人);
字符串LOC =文件:///android_asset/candlechart/candlebar.html;
webView.getSettings()setJavaScriptEnabled(真)。
webView.clearView();
// myWebView.measure(100,100);
。webView.getSettings()setUseWideViewPort(真);
。webView.getSettings()setLoadWithOverviewMode(真);
webView.loadUrl(LOC);
webView.loadUrl(JavaScript的:的getData('1020','M','棒')); webView.setWebViewClient(新WebViewClient(){
公共无效onPageFinished(的WebView视图,串LOC){ } });
您在呼唤你的第二个使用loadURL()方法太快。使用loadURL()是异步的。你需要等待,直到你的页面被加载。呼叫webView.loadUrl(JavaScript的:的getData('1020','M','棒'));在OnPageFinished方法。
I need to load a HTML file which internally has some AJAX service calls. I need to call a function in that HTML file from Java code. I can see the data loading in web but not in Emulator.
My HTML file is below
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, user-scalable=yes">
<link class="include" rel="stylesheet" type="text/css"
href="./jquery.jqplot.min.css" />
<link type="text/css" rel="stylesheet"
href="syntaxhighlighter/styles/shCoreDefault.min.css" />
<link type="text/css" rel="stylesheet"
href="syntaxhighlighter/styles/shThemejqPlot.min.css" />
<script class="include" type="text/javascript"
src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
</head>
<body>
<script class="include" type="text/javascript"
src="./jquery.jqplot.min.js"></script>
<script type="text/javascript"
src="syntaxhighlighter/scripts/shCore.min.js"></script>
<script type="text/javascript"
src="syntaxhighlighter/scripts/shBrushJScript.min.js"></script>
<script type="text/javascript"
src="syntaxhighlighter/scripts/shBrushXml.min.js"></script>
<!-- End Don't touch this! -->
<!-- Additional plugins go here -->
<script class="include" language="javascript" type="text/javascript"
src="./plugins/jqplot.dateAxisRenderer.min.js"></script>
<script class="include" language="javascript" type="text/javascript"
src="./plugins/jqplot.ohlcRenderer.min.js"></script>
<script class="include" language="javascript" type="text/javascript"
src="./plugins/jqplot.highlighter.min.js"></script>
<script type="text/javascript" src="./plugins/jqplot.dateAxisRenderer.min.js"></script>
<script type="text/javascript" src="./plugins/jqplot.canvasTextRenderer.min.js"></script>
<script type="text/javascript" src="./plugins/jqplot.canvasAxisTickRenderer.min.js"></script>
<script type="text/javascript" src="./plugins/jqplot.categoryAxisRenderer.min.js"></script>
<script type="text/javascript" src="./plugins/jqplot.barRenderer.min.js"></script>
<script type="text/javascript" src="./plugins/jqplot.cursor.min.js"></script>
<script class="code" language="javascript" type="text/javascript">
var arr = [];
var arr1 = [];
var jsonstr;
$(document).ready(function() {
$.jqplot.config.enablePlugins = true;
$("#status").html("Loading...");
$("#status").animate({opacity: 1,top: "200px"},200);
});
function getData(symbolId,timeLine,type){
//$("#mydiv").html(symbolId +" "+timeLine+" "+type);
$.ajax({
url: 'http://83.101.141.1:8020/mTadawul/TadawulService.svc/GetOHLCData?Symbol='+symbolId+'&Char='+timeLine,
dataType: 'json',
async: false,
success: function(data) {
jsonstr = jsontoarray(eval (data));
/*Custom Code to check the data*/
if(data != "")
{$("#status").animate({opacity: 0,top: "-50px"},200);createChart(type, timeLine);}else{$("#status").html("No Data");$("#status").animate({opacity: 1,top: "200px"},200);}
}
});
//$.getJSON('http://183.82.0.37:8080/TadawulWCFService/TadawulService.svc/GetOHLCData?Symbol=1010&Char='+timeLine, function(data) {
//});
return 1;
}
function jsontoarray(jsonstr){
var arrayl = [];
for (var i = 0; i < jsonstr.length; i++) {
var values = new Array();
values[0] = jsonstr[i].TimeStamp.replace("T"," ").replace("nm","");
values[1] = jsonstr[i].Open;
values[2] = jsonstr[i].High;
values[3] = jsonstr[i].Low;
values[4] = jsonstr[i].Close;
arrayl.push(values);
}
return arrayl;
}
function createChart(type, timeLine) {
timeLine = typeof timeLine !== 'undefined' ? timeLine : 'M';
console.log(jsonstr);
var charts = [{
name: "chart2",
seriesDefaults: {
yaxis: 'y2axis'
},
axes: {
xaxis: {
renderer: $.jqplot.DateAxisRenderer,
numberTicks:36,
tickOptions: {
formatString: '%b %e %Y ',
angle:-90
},
tickRenderer:$.jqplot.CanvasAxisTickRenderer,
labelOptions:{
fontFamily:'Arial',
fontSize: '14pt'
},
labelRenderer: $.jqplot.CanvasAxisLabelRenderer
},
},
series: [{
renderer: $.jqplot.OHLCRenderer,
rendererOptions: {
candleStick: true
}
}],
highlighter: {
show: true,
showMarker: true,
tooltipAxes: 'xy',
yvalues: 4,
formatString: '<table class="jqplot-highlighter"> \<tr><td>date:</td><td>%s</td></tr> \<tr><td>open:</td><td>%s</td></tr> \<tr><td>high:</td><td>%s</td></tr> \<tr><td>low:</td><td>%s</td></tr> \<tr><td>close:</td><td>%s</td></tr></table>'
},
data: [jsonstr]
}];
if(type == "line"){
charts[0].series[0]={};
}
else if(type == "bar"){
charts[0].series[0].rendererOptions = {smooth : true};
}else
{
charts[0].series[0].rendererOptions = {candleStick : true};
}
if(timeLine == 'H'){
charts[0].axes.xaxis.tickOptions = { formatString: '%b %e %#I %p',
angle:-90};
//charts[0].axes.xaxis['tickInterval'] = "1 hour";
}
$('#chart2').jqplot(charts[0]);
}
</script>
<div id="mydiv"></div>
<label id="lbl"></label>
<div class="test" style="position:absolute; top:-50px; left:40%; color:#333333; opacity:0;z-index:9999;" id="status">No Data</div>
<div id="chart2" style="height: 400px; width: 720px;">
</div>
In that code I need to call getData() passing 3 parameters from Java code.
My Java code is below:
webView.addJavascriptInterface(new JavaScriptInterface(this), "Android");
String loc = "file:///android_asset/candlechart/candlebar.html";
webView.getSettings().setJavaScriptEnabled(true);
webView.clearView();
// myWebView.measure(100, 100);
webView.getSettings().setUseWideViewPort(true);
webView.getSettings().setLoadWithOverviewMode(true);
webView.loadUrl(loc);
webView.loadUrl("javascript:getData('1020','M','bar')");
webView.setWebViewClient(new WebViewClient() {
public void onPageFinished(WebView view, String loc) {
}
});
You are calling your second loadUrl() way too soon. loadUrl() is asynchronous. You need to wait until your page is loaded. Call webView.loadUrl("javascript:getData('1020','M','bar')"); in the OnPageFinished method.
这篇关于如何从Java调用code Android原生的JavaScript函数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!