自定义Cordova插件中的Null Pointeer异常

时间:2018-04-11 11:09:55

标签: java cordova-plugins

上下文:我正在创建一个自定义Cordova插件,它使用扫描程序本机功能,如扫描,打印,显示扫描文档(扫描仪上有一个屏幕,就像平板电脑一样)

代码本身工作正常(扫描程序在Android操作系统上运行),当我想将代码“转换”为Cordova插件时,事情变得棘手(我有已经为另一个项目完成了它并且它完美地工作了)

问题:为了使用启动扫描的方法,我必须确保ScanService.java 中的所述方法(=它是一个具有{{的接口1}})是绑定的,可以通过这样的意图使用:

Abstract Class Stub extends android.os.Binder implements my.package.name.ScanService

ScanServConn变量:

Context ctx = this.cordova.getActivity().getApplicationContext();

public boolean BindServiceContext(Context ctx)
    {       
        Intent myintent = new Intent("name.of.package.ScanService");
        myintent.setPackage("name.of.package"); 

        ctx.startService(myintent);

        return ctx.bindService(myintent, ScanServConn, ctx.BIND_AUTO_CREATE);
    }

此时,BindingServiceContext方法返回public ScanService mService; public ServiceConnection ScanServConn = new ServiceConnection() { @Override public void onServiceConnected(ComponentName name, IBinder service) { mService = ScanService.Stub.asInterface(service); try { mService.initService(mScanCK); mService.registerSystemCallBack(mSysCK); mService.mountScannerDevice(); } catch (RemoteException e) { e.printStackTrace(); } } @Override public void onServiceDisconnected(ComponentName name) { try { if (mService != null) { mService.unmountScannerDevice(); mService.unregisterSystemCallBack(mSysCK); mService.unregisterCallBack(mScanCK); mService.uninitService(); } } catch (RemoteException e) { e.printStackTrace(); } mService = null; mSysCK = null; mScanCK = null; } };

false

将插件添加到cordova项目并对其进行测试时出现的确切错误:

private void StartScan(String strScanProfilePath) //
    {
        try
        {
            int iRet = mService.getScannerDeviceStatus();

            if ( iRet == Defination.PAPER_STATUS_ON_TRAY)
            {
                int ret = mService.setScanProfile(strScanProfilePath);

                if (ret == Defination.ERROR_SUCCESS)
                {
                    // Start scanning.
                    mService.scanStart();

                }
            }

        }
        catch (RemoteException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

在我的Attempt to invoke interface method 'int my.package.name.ScanService.getScannerDeviceStatus()' on a null object reference. 我添加了这一行,所以在项目的plugin.xml我的服务被声明:

AndroidManifest.xml

0 个答案:

没有答案