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原生代码的无缝交互,为开发者提供了更多的可能性和灵活性。如果你有类似的需求,可以尝试使用上述方法来实现。