Android接收JS传过来的对象
在Android开发中,有时候我们需要通过WebView与JavaScript进行交互,其中一种情况就是JS向Android传递对象。本文将介绍如何在Android中接收JS传过来的对象,并给出相应的代码示例。
1. JavaScript传递对象到Android
首先,我们需要在JavaScript中创建一个对象并通过WebView的addJavascriptInterface
方法将这个对象传递给Android。以下是一个简单的示例代码:
// 创建一个对象
var myObject = {
name: 'John',
age: 30
};
// 将对象传递给Android
window.androidInterface.passObject(JSON.stringify(myObject));
2. Android接收JS传过来的对象
在Android的Activity中,我们需要通过addJavascriptInterface
方法将一个Java对象暴露给JavaScript,以便JavaScript可以调用该Java对象的方法。以下是一个示例代码:
public class MyJavaScriptInterface {
@JavascriptInterface
public void passObject(String objectJson) {
try {
JSONObject jsonObject = new JSONObject(objectJson);
String name = jsonObject.getString("name");
int age = jsonObject.getInt("age");
// 处理接收到的对象
Log.d("MyObject", "Name: " + name + ", Age: " + age);
} catch (JSONException e) {
e.printStackTrace();
}
}
}
在onCreate
方法中,添加以下代码将MyJavaScriptInterface
对象传递给WebView:
WebView webView = findViewById(R.id.webview);
webView.getSettings().setJavaScriptEnabled(true);
webView.addJavascriptInterface(new MyJavaScriptInterface(), "androidInterface");
3. 完整示例
下面是一个完整的示例,展示了JavaScript如何传递对象给Android,并Android如何接收并处理这个对象:
<!DOCTYPE html>
<html>
<head>
<title>Pass Object to Android</title>
</head>
<body>
<button onclick="passObjectToAndroid()">Pass Object</button>
<script>
function passObjectToAndroid() {
var myObject = {
name: 'Alice',
age: 25
};
window.androidInterface.passObject(JSON.stringify(myObject));
}
</script>
</body>
</html>
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
WebView webView = findViewById(R.id.webview);
webView.getSettings().setJavaScriptEnabled(true);
webView.addJavascriptInterface(new MyJavaScriptInterface(), "androidInterface");
webView.loadUrl("file:///android_asset/index.html");
}
public class MyJavaScriptInterface {
@JavascriptInterface
public void passObject(String objectJson) {
try {
JSONObject jsonObject = new JSONObject(objectJson);
String name = jsonObject.getString("name");
int age = jsonObject.getInt("age");
Log.d("MyObject", "Name: " + name + ", Age: " + age);
} catch (JSONException e) {
e.printStackTrace();
}
}
}
}
4. 总结
通过上述代码示例,我们可以实现JavaScript向Android传递对象,并在Android中接收和处理这个对象的数据。这种方式可以实现Web页面与Android原生代码的无缝交互,为开发者提供了更多的可能性和灵活性。如果你有类似的需求,可以尝试使用上述方法来实现。