采用网页的形式开发UI界面(addJavascriptInterface的失效)

1.index.htlm文件要放在assests中

2.addJavascriptInterface()在sdk 17后失效(不确定,没有验证),解决方法:

3.在操作html参数的时候注意线程的使用

html:

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html"; charset="UTF-8" />
<title>网页技术编辑androidUI</title>
<script type="text/javascript">
function show(jsondate){
var jsonobjs = eval(jsondate);
var table =document.getElementById("personTable");
for (var y=0;y<jsonobjs.length;y++){
var tr = table.insertRow(table.rows.length);//添加一行
//添加三列
var td0 = tr.insertCell(0);
var td1 = tr.insertCell(1);
td1.align = "center";
var td2 = tr.insertCell(2);
td2.align = "center";
//设置内容和属性
td0.innerHTML = jsonobjs[y].name;
td1.innerHTML = jsonobjs[y].amount;
td2.innerHTML = "<a href='javascript:contact.call(\""+jsonobjs[y].phone+"\")'>"+jsonobjs[y].phone+"</a>";
}
}
</script>
</head>
<body onLoad="javascript:contact.showcontacts()">
<table border="0" width="100%" id="personTable" cellspacing="0">
<tr>
<td width="35%">姓名</td><td width="30%" align="center">存款</td><td width="30%" align="center">电话</td>
</tr>
</table>
<!--<a href="javascript:window.location.reload()">添加</a>-->
<a href="javascript:contact.add()">添加</a>
</body>
</html>

public class MainActivity extends Activity {
private WebView webView;
@SuppressLint("JavascriptInterface")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
webView = (WebView) this.findViewById(R.id.id_webview);
//加载assets下的index。htlm文件
webView.loadUrl("file:///android_asset/index.html");
//社会浏览器可以加载js代码
webView.getSettings().setJavaScriptEnabled(true);
//添加使用javaScript代码
webView.addJavascriptInterface(new JSObject(), "contact");
}
public class JSObject{
//调用js中的博大电话的方法
@JavascriptInterface
public void call(String phone){
Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:" + phone));
if (ActivityCompat.checkSelfPermission(MainActivity.this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
// TODO: Consider calling
// ActivityCompat#requestPermissions
// here to request the missing permissions, and then overriding
// public void onRequestPermissionsResult(int requestCode, String[] permissions,
// int[] grantResults)
// to handle the case where the user grants the permission. See the documentation
// for ActivityCompat#requestPermissions for more details.
return;
}
startActivity(intent);
}
//js中的方法
@JavascriptInterface
public void showcontacts(){
ContactService contactService = new ContactService();
List<Contact> list = contactService .getContact();
JSONArray jsonArray = new JSONArray();
for (Contact contact:list) {
try {
JSONObject jsonObject = new JSONObject();
jsonObject.put("name", contact.getName());
jsonObject.put("amount", contact.getAmount());
jsonObject.put("phone", contact.getPhone());
jsonArray.put(jsonObject);
} catch (JSONException e) {
e.printStackTrace();
}
}

final String json = jsonArray.toString();
//调用show的js方法
webView.post(new Runnable() {
@Override
public void run() {
webView.loadUrl("javascript:show('" + json+"')");
}
});
}
@JavascriptInterface
public void add(){
ContactService contactService = new ContactService();
List<Contact> list = contactService .getContact();
JSONArray jsonArray = new JSONArray();
for (Contact contact:list) {
try {
JSONObject jsonObject = new JSONObject();
jsonObject.put("name", contact.getName());
jsonObject.put("amount", contact.getAmount());
jsonObject.put("phone", contact.getPhone());
jsonArray.put(jsonObject);
} catch (JSONException e) {
e.printStackTrace();
}
}
final String json = jsonArray.toString();
//调用show的js方法
webView.post(new Runnable() {
@Override
public void run() {
webView.loadUrl("javascript:show('" + json+"')");
}
});
}
}
}

public class Contact {
private Integer id;
private String name;
private String phone;
private Integer amount;
public Contact(Integer id, String name, String phone, Integer amount) {
this.id = id;
this.name = name;
this.phone = phone;
this.amount = amount;
}

public Integer getId() {
return id;
}

public void setId(Integer id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getPhone() {
return phone;
}

public void setPhone(String phone) {
phone = phone;
}

public Integer getAmount() {
return amount;
}

public void setAmount(Integer amount) {
this.amount = amount;
}
}


public class ContactService {
List<Contact> list = new ArrayList<>();
public List<Contact> getContact(){
list.add(new Contact(1,"哈哈1","15513025865",123456));
list.add(new Contact(2,"哈哈2","15513025865",123456));
list.add(new Contact(3,"哈哈3","15513025865",123456));
list.add(new Contact(4,"哈哈4","15513025865",123456));
list.add(new Contact(5,"哈哈5","15513025865",123456));

return list;
}
public void add(){
list.add(new Contact(1,"哈哈1","15513025865",123456));
}
}
 


转载于:https://www.cnblogs.com/wslcnblogs/p/5002927.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值