JsInterfaceHandler.java 1.97 KB
package com.polysoft.nafmii.webview;

import android.app.Activity;
import android.text.TextUtils;

import com.alibaba.fastjson.JSONObject;
import com.polysoft.nafmii.bean.Result;

public class JsInterfaceHandler {

    private final Activity mActivity;
    private final JavaToJsinterface javaTojs;
    private String jsMethodName;

    public JsInterfaceHandler(WebviewHandler handler) {
        this.mActivity = handler.getFragment().getActivity();
        this.javaTojs = handler.getJsInterface();
    }

    public void parse(String params, JsHandle jsHandle) {
//        try {
            JSONObject obj = JSONObject.parseObject(params);
            this.jsMethodName = obj.getString("jsMethodName");
            JSONObject data = obj.getJSONObject("data");
            jsHandle.handle(data, new JsInterfaceImpl());
//        } catch (Exception e) {
//            e.printStackTrace();
//            this.sendMessage2Js(Result.fail("接口调用异常").toString());
//        }
    }

    private void sendMessage2Js(String json) {
        if (TextUtils.isEmpty(jsMethodName)) {
            return;
        }
        if ("'main'".equals(Thread.currentThread().getName())) {
            javaTojs.callJs(jsMethodName, json);
            return;
        }
        this.mActivity.runOnUiThread(() -> javaTojs.callJs(jsMethodName, json));
    }


    class JsInterfaceImpl implements JsInterface {
        @Override
        public void callJs(Result result) {
            sendMessage2Js(result.toString());
        }

        @Override
        public void success(Object obj) {
            this.callJs(Result.success(obj));
        }

        @Override
        public void fail(String statusText) {
            this.callJs(Result.fail(statusText));
        }
    }


    public interface JsHandle {
        void handle(JSONObject data, JsInterface js);
    }

    public interface JsInterface {
        void callJs(Result result);

        void success(Object obj);

        void fail(String statusText);
    }


}