可以通过页面提交后台的方式,间接调用后台的服务java代码。
也可以通过ajax的方式,调用后台的服务java代码。
两种方式稍有差别,不过都是前后台的通信交互。
首先是网页:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html charset=UTF-8">
<title>js和android相互调用</title>
<head>
<script type="text/javascript" language="javascript">
//调用java方法jsCallJava()
function showHtmlcallJava() {
var str = window.android.jsCallJava()
document.getElementById("info1").value = str
}
//调用java方法jsCallJavaWithParams(String var),带参数
function showHtmlcallJava2() {
var str = window.android.jsCallJavaWithParams("Devin Chen")
document.getElementById("info2").value = str
}
//提供给java调用的方法
function show() {
document.getElementById("id_input").value = "Java调用Html中的方法"
}
//提供给java调用的方法,带参数
function showWithParam(param) {
document.getElementById("id_input2").value = "Java调用Html中的方法: " + param
}
</script>
</head>
<body>
<input id="info1" style="width: 90%" type="text" value="null" /><br>
<input type="button" value="Html调用Java方法" onclick="showHtmlcallJava()" /><br>
<input id="info2" style="width: 90%" type="text" value="null" /><br>
<input type="button" value="Html调用带参数的Java方法" onclick="showHtmlcallJava2()" /><br>
<input id="id_input" style="width: 90%" type="text" value="null" /><br>
<input type="button" value="Java调用Html方法" onclick="window.android.javaCallJavaScript()" /><br>
<input id="id_input2" style="width: 90%" type="text" value="null" /><br>
<input type="button" value="Java调用带参数的Html方法" onclick="window.android.javaCallJavaScriptWithParams()" />
</body>
</html>
Android部分的布局就一个WebView,MainActivity源代码:
/*** java方法和javascript方法的相互调用
*/
public class MainActivity extends AppCompatActivity {
private static final String url = "http://192.168.0.100:8080/server"
private WebView mWebView
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
initView()
}
private void initView() {
mWebView = (WebView) findViewById(R.id.web_main)
WebSettings settings = mWebView.getSettings()
settings.setJavaScriptEnabled(true)
settings.setDefaultTextEncodingName("utf-8")
mWebView.loadUrl(url)
mWebView.setWebViewClient(new WebViewClient())
//这两句是必须的,"android"就是jsp中调用方法时window后面的对象
Object obj = getObject()
mWebView.addJavascriptInterface(obj, "android")
}
private Object getObject() {
Object obj = new Object() {
/**
* html中的JavaScript调用Java方法
* 注解是必须的
* @return
*/
@JavascriptInterface
public String jsCallJava() {
return "JavaScript调用Java方法"
}
/**
* html中的JavaScript调用带参数的Java方法
* 注解是必须的
* @return
*/
@JavascriptInterface
public String jsCallJavaWithParams(String var) {
return "JavaScript调用带参数的Java方法" + var
}
/**
* java调用html中的方法,遗憾的是不知道有什么办法可以拿到返回值
*/
@JavascriptInterface
public void javaCallJavaScript() {
runOnUiThread(new Runnable() {
@Override
public void run() {
mWebView.loadUrl("javascript:show()")
}
})
}
/**
* java调用html中的方法,并且传递参数,这个有大用
*/
@JavascriptInterface
public void javaCallJavaScriptWithParams() {
runOnUiThread(new Runnable() {
@Override
public void run() {
mWebView.loadUrl("javascript:showWithParam('baoge')")
}
})
}
}
return obj
}
}
body中部分代码如:<center><font size="4" color="red">吊灯</font><input type="button" id="diaodeng" value=<%=state[0]%>onclick="dianji1()"><br><br><br><br></center>script中的的代码如下:
function dianji1(){
var abc=document.getElementById("diaodeng")
if(abc.value=="on"){
abc.value="off"
}
else{
abc.value="on"
}
}
要求是通过点击按钮能够调用java类中的方法从而修改数据库中的内容
或者
$("button").click(function(){
$.post("/foo/usr/11",function(data){
})
})
jquery post方法调用java方法修改数据库