phe*_*cks 31 javascript java android
是否可以使用addJavascriptInterface()将JavaScript对象从JavaScript传递给Java?这些方面的东西:
var javaScriptObject = {"field1":"string1", "field2":"string2"};
JavaScriptInterface.passObject(javaScriptObject);
Run Code Online (Sandbox Code Playgroud)
如何在Java端捕获这样的调用?设置接口以发送字符串没有问题,但是当我发送一个对象时,我在Java端收到null.
Com*_*are 30
AFAIK,addJavascriptInterface()仅适用于原始类型和字符串,因此您无法传递任意Javascript对象.
Tej*_*gde 10
这就是我在做的......
在Android中......
@JavascriptInterface
public void getJSONTData(String jsonData) {
try {
JSONObject data = new JSONObject(jsonData); //Convert from string to object, can also use JSONArray
} catch (Exception ex) {}
}
Run Code Online (Sandbox Code Playgroud)
在JavaScript中......
var obj = { Name : 'Tejasvi', Age: 100};
var str = JSON.stringify(obj);
Android.getJSONTData(str);
Run Code Online (Sandbox Code Playgroud)
截至目前,我找不到任何其他正确的方法将本机JavaScript对象直接传递给JavascriptInterface.
调用Android.getJSONTData({ Name : 'Tejasvi', Age: 100})结果null(如果参数类型为Object)或undefined(如果参数类型定义为String)in getJSONTData.
我找到了一个使用JSON的解决方案.我的Java方法返回一个JSONArray,在我收到的javascript代码上,并使用JSON.parse()转换为javascript向量.看例子:
Java的:
public class JavaScriptInterface {
Context mContext;
private static int ind=-1;
private static int [] val = { 25, 25, 50, 30, 40, 30, 30, 5, 9 };
public JavaScriptInterface(Context c) {
mContext = c;
}
@JavascriptInterface
public JSONArray getChartData() {
String texto = " [ {name: 'valor1', 2007: "+val[(++ind)%9]+"}, "+
" {name: 'valor2', 2007: "+val[(++ind)%9]+"}, "+
" {name: 'valor3', 2007: "+val[(++ind)%9]+"} ]";
JSONArray jsonar=null;
try {
jsonar = new JSONArray(texto);
} catch (JSONException e) {
e.printStackTrace();
}
return jsonar;
}
}
Run Code Online (Sandbox Code Playgroud)
现在javascript代码:
window.generateData = function() {
/*var data = [ {name: 'valor1', 2007: 50},
{name: 'valor2', 2007: 20},
{name: 'valor3', 2007: 30} ]; */
var data = JSON.parse( Android.getChartData() );
return data;
};
Run Code Online (Sandbox Code Playgroud)
上面注释的代码显示了静态时的情况,现在数据来自Java代码.
它是Android 2.1和3.2上的睾丸.
小智 5
我可以运行这个功能
在 JavaScript 中:
var data = {
'username' : $('#username').val().trim(),
'password' : $('#password').val().trim(),
'dns' : $('#dns').val().trim()
}
var str = JSON.stringify(data);
Native.getLoginService(str);
Run Code Online (Sandbox Code Playgroud)
在安卓中:
@JavascriptInterface
public void getLoginService(String jsonData){
try{
JSONObject data = new JSONObject(jsonData);
String username = data.getString("username");
String password = data.getString("password");
String dns = data.getString("dns");
Log.i("TAG",username + " - " + password + " - " + dns);
}catch (Exception ex){
Log.i("TAG","error : " + ex);
}
}
Run Code Online (Sandbox Code Playgroud)
祝你好运...
| 归档时间: |
|
| 查看次数: |
30277 次 |
| 最近记录: |