java - 使用 Codename One NativeInterface 调用 native Android 库时仍然出现 Nullpointer

标签 java android nullpointerexception native codenameone

我正在构建一个 Codename One 应用程序,其中包含第 3 方 Android 库。这意味着使用NativeInterface。第 3 方库是 sreaderautolib_v1.1.jar。在 Android 上使用声音端口与磁条阅读器进行通信。

  • 我已将该 jar 包含在我的 CN1 项目中的 native\android 文件夹下。
  • 我创建了一个扩展 NativeInterface 的 Swipe 接口(interface)(包 co.za.jaco.swiperapp.components;)。
  • 我右键单击了 Swipe 界面,选择了“生成 native 访问”,并在 native\android\co\za\jaco\swiperapp\components\文件夹下编辑了生成的 SwipeImpl。
  • 我还拥有 CN1 构建提示 (android.xpermissions) 中指定的正确 Android 权限,这是为了使用声音端口。

我可以构建它(将其发送到 CN1 服务器)并将其安装在我的手机上,但在某一行之后继续获取空指针。 我认为我对如何在 CN1 上实现 NativeInterfaces 的理解缺乏,并且与代码相关,但我看不到错误。

请帮忙!!

滑动:

package co.za.jaco.swiperapp.components;

import com.codename1.system.NativeInterface;

public interface Swipe extends NativeInterface {

public boolean Init();

public boolean isInit();

public void Start();

public void Stop();

public void SetMute(boolean mute);

public String GetErrorString();

public boolean Initial(long millis);

public String GetVersion(long millis);

public String GetKSN(long millis);

public String GetRandom(long millis);

public String ReadCard(long millis);

public String GetT1PAN(long millis);

public String GetT1HolderName_Exd(long millis);

public String GetT2PAN(long millis);

public String GetT2Exd(long millis);

public void Cancel();

public String GenerateWorkingKey(String random, String ksn);

public String TriDesDecryption(String dnc_key, String en_data);
}

SwipeImpl:

package co.za.jaco.swiperapp.components;

public class SwipeImpl {
private com.singular.hijack.autofreq.SReaderApi getSreaderInstance(){
    return com.singular.hijack.autofreq.SReaderApi.getSreaderInstance();
}
public void Start() {
    getSreaderInstance().Start();
}

public void Cancel() {
    getSreaderInstance().Cancel();
}

public void Stop() {
    getSreaderInstance().Stop();
}

public boolean Init() {
    return getSreaderInstance().Init();
}

public boolean isInit() {
    return getSreaderInstance().isInit();
}

public void SetMute(boolean param) {
    getSreaderInstance().SetMute(param);
}

public String GetErrorString() {
    return getSreaderInstance().GetErrorString();
}

public boolean Initial(long param) {
    return getSreaderInstance().Initial(param);
}

public String GetVersion(long param) {
    return getSreaderInstance().GetVersion(param);
}

public String GetKSN(long param) {
    return getSreaderInstance().GetKSN(param);
}

public String GetRandom(long param) {
    return getSreaderInstance().GetRandom(param);
}

public String ReadCard(long param) {
    return getSreaderInstance().ReadCard(param);
}

public String GetT1PAN(long param) {
    return getSreaderInstance().GetT1PAN(param);
}

public String GetT1HolderName_Exd(long param) {
    return getSreaderInstance().GetT1HolderName_Exd(param);
}

public String GetT2PAN(long param) {
    return getSreaderInstance().GetT2PAN(param);
}

public String GetT2Exd(long param) {
    return getSreaderInstance().GetT2Exd(param);
}

public String GenerateWorkingKey(String param, String param1) {
    return getSreaderInstance().GenerateWorkingKey(param,param1);
}

public String TriDesDecryption(String param, String param1) {
    return getSreaderInstance().TriDesDecryption(param,param1);
}

public boolean isSupported() {
    return true;
}
}

状态机:

Swipe swipe = (Swipe) NativeLookup.create(Swipe.class);
appendText("swipe.obj == null :" + (swipe == null));//says false
boolean bool = swipe.Initial(2500); **//THROW NULLPOINTER**
appendText("swipe.Initial(2500):" + bool);
boolean bool2 = swipe.isInit();
appendText("swipe.isInit():" + bool2);

最佳答案

我猜测 getSreaderInstance() 返回 null。我建议通过 DDMS 连接设备并在控制台中获取异常的完整堆栈跟踪。

关于java - 使用 Codename One NativeInterface 调用 native Android 库时仍然出现 Nullpointer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20241974/

相关文章:

java - 向 ActionBar 项目添加监听器,onOptionsItemSelected NullPointerException

android - Firebase Google 登录 - 照片 URI

Android Material Design Inline Datepicker问题

java - 事件错误,不确定它们的含义

java - SQLiteDatabase Android 中出现 java.lang.NullPointerException 错误

Android:读取在 Google 云端硬盘文件选择器中选择的文件

java - 如何将视频文件 (mp4) 添加到我的 android 应用程序中?

java - 将数据库中的数据显示到 TextView 中 (Android)

java - 错误: No operations allowed after connection closed

Java 编译错误限制为 100