android中使用tmf框架插件化开发的问题

本文讲述了在Android项目中使用TMF框架进行插件化开发时遇到的特殊字符转义问题。作者通过创建抽象父类TMFBaseJsApi并重写核心方法,详细解析了H5与源生交互的过程。在处理扫码插件时,发现JSONObject在传递数据时自动转义了特殊字符,导致H5接收的数据不正确。为了解决这个问题,作者重写了JsCallbackFunc,使用Gson库来避免转义,成功解决了问题。
摘要由CSDN通过智能技术生成

android中使用tmf框架插件化开发的问题

最近项目开发使用的是tmf框架,其中大多数都是通过源生和H5交互的方式来实现的,大体实现和别的三方框架是一样的,需要按照tmf的官方文档引入一些lib和依赖,添加一些配置等。
我主要就我们在使用做一简单的总结。
大致是使用是项目中创建一个抽象的父类(TMFBaseJsApi)让其extends JsApi,其中JsApi是tmf框架中的类。在TMFBaseJsApi中重写两个核心的方法,分别是:

public abstract class TMFBaseJsApi extends JsApi {
   
    protected final String TAG = "TMFBaseJsApi";
    protected long clickTimeMillis = System.currentTimeMillis();
    protected static final String STATUS = "status";
    protected static final String MESSAGE = "message";
    protected static final String CALLBACK_DATA = "callbackData";//回调数据
    protected static final String STATUS_SUCC = "0";//成功
    protected static final String STATUS_FIAL = "1";//失败
    protected static final String STATUS_NETWORK_NONE = "-9999";//无网
    protected Activity activity;
@Override
    public String method() {
   
        return pluginName();
    }

 @Override
    public void handle(BaseTMFWeb baseTMFWeb, JsCallParam jsCallParam) {
   
        Logs.d(TAG, "TMFBaseJsApi-名称:" + pluginName() + ",参数:" + jsCallParam.paramStr);
        this.activity = baseTMFWeb.mActivity;
        execute(baseTMFWeb, jsCallParam);
    }

以上两个重要的方法,第一个是H5所调用的插件的名字,第二个是handle()这个方法H5调用源生的入口方法,同时您看到在这个方法中调了execute(baseTMFWeb,jsCallParam)这个方法,该方法也是一个抽象方法。

 /**
     * 调用入口
     */
    public abstract void execute(BaseTMFWeb baseTMFWeb, JsCallParam jsCallParam);

该方法是每个客户端写的插件被调到的入口,例如以扫码这个插件为例简单说一下。
目前我们的需求是扫二维码将结果给H5,让H5对扫码的结果进行一些处理。因此我需要些一个插件(也就是一个类)这里定义为addScan(人家定义的类名,莫笑),所有的插件都是继承父类TMFBaseJsApi,需要重写核心的方法,代码如下:

public class addScan extends TMFBaseJsApi {
   
 @Override
    public String pluginName() {
   
        return "addScan";
    }
`` @Override
    public void execute(final BaseTMFWeb baseTMFWeb, final JsCallParam jsCallParam) {
   
        this.baseTMFWeb = baseTMFWeb;`
}

这就写好了一个插件,这里pluginName一定要和H5保持一致,否则调用不到,如果这个插件被H5调用到,则execute()方法就会被执行,而jSCallParam 则是H5需要给源生端传的参数,通常是JSONObject,通常是通过解析Json来拿到我们需要获取的值。比如我们这一步需要从H5获得一些参数,我们只需要加以下代码:


```java
 @Override
    public void execute(final BaseTMFWeb baseTMFWeb, final JsCallParam jsCallParam) {
   
        this.baseTMFWeb = baseTMFWeb;
        //注册扫描结果事件
        if (!EventBus.getDefault().isRegistered(this)){
   
            EventBus.getDefault().register(this);
        }
        try {
   
            JSONObject json = new JSONObject(jsCallParam.paramStr);
            JSONObject temp1 = new JSONObject(json.optString("scanCallback"));
           // scanFunc = new TestClass();
            scanFunc=new JsCallbackFunc();
            scanFunc.sessionId = temp1.optString("sessionId");
            scanFunc.funcId = temp1.optInt(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值