Android JS 交互出现 Uncaught Error: Error calling method on NPObject
由于HTML5的功能越来越强大,native app的一些功能逐步被html页面代替,不可避免的JS交互也用到的也越来越多.在第一个版本向第二个版本迭代的过程中却发生了莫名其妙的问题,第一个版本JS调用的方法如下:
1 public void gotoAdvisorDetail(String id) { 2 if (!TextUtils.isEmpty(id)) { 3 Intent intent = new Intent(mContext, Detail.class); 4 intent.putExtra("id", id); 5 mContext.startActivity(intent); 6 } 7 }
实现的功能就是根据id 打开对应对象的详情界面
在第二个版本中的需求是增加一个参数,跳转到详情界面的第几个Fragment,直接增加参数方法改为如下:
public void gotoAdvisorDetail(String advisor_id,String position) { if (!TextUtils.isEmpty(advisor_id)) { Intent intent = new Intent(mContext, Detail.class); intent.putExtra("advisor_id", advisor_id); int pos = Integer.parseInt(position); intent.putExtra("position", pos); mContext.startActivity(intent); } }
但是这个时候就出现了题目所示的异常:6-13 15:37:14.717: E/Web Console(19235): Uncaught Error: Error calling method on NPObject. at http://192.168.1.11/mobile/..........js:428
莫名其妙啊,我只是多加了个参数而已,后来在stackoverflow上搜出的解释大多是Android线程安全的问题,创建子线程进行操作,于是代码改成了下面这样问题就解决了
public void gotoAdvisorDetail(final String advisor_id, final String position) { new Thread(new Runnable() { @Override public void run() { if (!TextUtils.isEmpty(advisor_id)) { Intent intent = new Intent(mContext, Detail.class); intent.putExtra("advisor_id", advisor_id); if (!TextUtils.isEmpty(position)) { Logger.i("gotoAdvisorDetail position = " + position); int pos = Integer.parseInt(position); intent.putExtra("position", pos); } mContext.startActivity(intent); } } }).start(); }