Atitit.android jsbridge v1新特性
Atitit.android ?jsbridge v1新特性
?
1. Java代碼調用js并傳參其實是通過WebView的loadUrl方法去調用的、只是參數url的寫法不一樣而已1
2. 三、JAVA和JS交互注意事項1
3. Js調用android java通過jsbridge2
4. JsBridge3
5. WebView ??Error calling method on NPObject5
?
?
?
只能返回str類型,要死obj類型,就是{}的...js提示是個obj,json2str是個{}...空的對象..
?
1.?Java代碼調用js并傳參其實是通過WebView的loadUrl方法去調用的、只是參數url的寫法不一樣而已
?
// 無參數調用
contentWebView.loadUrl("javascript:javacalljs()");// 傳遞參數調用
?
2.?三、JAVA和JS交互注意事項
1、Java 調用 js 里面的函數、效率并不是很高、估計要200ms左右吧、做交互性很強的事情、這種速度很難讓人接受、而js去調Java的方法、速度很快、50ms左右、所以盡量用js調用Java方法
2、Java 調用 js 的函數、沒有返回值、調用了就控制不到了
3、Js 調用 Java 的方法、返回值如果是字符串、你會發現這個字符串是 native 的、轉成 locale 的才能正常使用、使用 toLocaleString() 函數就可以了、不過這個函數的速度并不快、轉化的字符串如果很多、將會很耗費時間
4、網頁中盡量不要使用jQuery、執行起來需要5-6秒、最好使用原生的js寫業務腳本、以提升加載速度、改善用戶體驗
?
作者::??★(attilax)>>>???綽號:老哇的爪子?(?全名::Attilax?Akbar?Al?Rapanui?阿提拉克斯?阿克巴?阿爾?拉帕努伊?)?漢字名:艾龍,??EMAIL:1466519819@qq.com
轉載請注明來源:?http://blog.csdn.net/attilax
?
3.?Js調用android java通過jsbridge
function btn()
{
try{
var r=jsBridge.invoke("com.example.atiplat_vodcp.browExtObj.retStr","testStr..");
???alert("raw r:"+r); ??
??try{
??r=JSON.stringify(r);
??}catch(e){
??alert( "str2json e:"+e);
??}
alert("ret from jsbrd:"+r);
}catch(e)
{
alert(e);
}
?
}
4.?JsBridge
import?java.io.PrintWriter;
import?java.io.StringWriter;
import?java.lang.reflect.InvocationTargetException;
import?java.net.URLEncoder;
import?java.util.concurrent.Callable;
?
import?org.apache.commons.lang3.reflect.ConstructorUtils;
import?org.apache.commons.lang3.reflect.MethodUtils;
?
import?com.attilax.exception.ExUtil;
import?com.attilax.ref.refx;
?
import?android.content.Intent;
import?android.net.Uri;
import?android.os.Environment;
import?android.os.Handler;
import?android.util.Log;
import?android.webkit.JavascriptInterface;
import?android.widget.Toast;
?
public?class?JsBridge?{
public?static?String?getTrace(Throwable?t)?{
StringWriter?stringWriter?=?new?StringWriter();
PrintWriter?writer?=?new?PrintWriter(stringWriter);
t.printStackTrace(writer);
StringBuffer?buffer?=?stringWriter.getBuffer();
return?buffer.toString();
}
?
MainActivity?mainActivity;
?
public?JsBridge(MainActivity?mainActivity2)?{
mainActivity?=?mainActivity2;
}
// sdk17�汾���?���?�� solu?click btn?ma?fein?..
@JavascriptInterface??
public????String?invoke(final?String?method,?final?Object...?p1)?{
?
String?classname?=?refx.getClassName(method);
String?meth_name?=?refx.getMethodName(method);
Object?o;
boolean?flag?=?true;
String?trace?=?"$def e";
try?{
o?=?ConstructorUtils.invokeConstructor(Class.forName(classname),
null);
}?catch?(Exception?e)?{
// TODO?Auto-generated catch block
e.printStackTrace();
// throw new RuntimeException(e);
flag?=?false;
trace?=?ExUtil.getTrace(e);
return?trace;
}
?
if?(flag)?{
try?{
return?(String)?MethodUtils.invokeMethod(o,?meth_name,?p1);
}?catch?(Exception?e)?{
// TODO?Auto-generated catch block
e.printStackTrace();
// throw new RuntimeException(e);
trace?=?ExUtil.getTrace(e);
return?trace;
}
}
// Handler handler = new Handler();
// // Callable<V>
// handler.post(new Runnale(){
//
// public void run(){
//
// // 更新UI界面元素代碼
//
// }
//
// });
// handler.
return?trace;
?
}
?
5.??WebView ??Error calling method on NPObject
直接android throw yg ex.走中個蘭..不個ex ?try給掛搖..轉換成個str輸出出來走ok蘭...
?
轉載于:https://www.cnblogs.com/attilax/p/5963408.html
總結
以上是生活随笔為你收集整理的Atitit.android jsbridge v1新特性的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JAVA Web.xml 加载顺序
- 下一篇: Atitit.java相比c#.net的