По-прежнему появляется Nullpointer при вызове собственных библиотек Android с использованием Codename One NativeInterface

Я создаю приложения Codename One, которые включают стороннюю версию Android Lib. Это означает использование NativeInterface. Сторонняя библиотека - sreaderautolib_v1.1.jar. Используется на Android для связи с считывателем магнитной ленты через звуковой порт.

  • Я включил банку в свой проект CN1 в папке native \ android.
  • Я создал интерфейс Swipe, расширяющий NativeInterface (пакет co.za.jaco.swiperapp.components;).
  • Я щелкнул правой кнопкой мыши интерфейс Swipe и выбрал Generate Native Access и отредактировал получившийся SwipeImpl в собственной папке \ android \ co \ za \ jaco \ swiperapp \ components \.
  • У меня также есть правильные разрешения Android, указанные в подсказках по сборке CN1 (android.xpermissions), это для использования звукового порта.

Я могу собрать его (отправить на серверы CN1) и установить на свой телефон, но продолжаю получать нулевой указатель после определенной строки. Я думаю, что мое понимание того, как реализовать NativeInterfaces на CN1, отсутствует, и это связано с кодом, но я не вижу ошибки.

Пожалуйста помоги !!

Проведите пальцем по экрану:

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);

person Jaco du Toit    schedule 27.11.2013    source источник


Ответы (1)


Я предполагаю, что getSreaderInstance() возвращает null. Предлагаю подключить устройство через DDMS и получить полную трассировку стека исключения в консоли.

person Shai Almog    schedule 27.11.2013
comment
Похоже, я, по крайней мере, правильно понял часть NativeLookup. Спасибо, сэр. И Codename One потрясающий !! - пришлось бы это добавить. Я сделаю то, что вы предлагаете, и устраню неполадки еще немного. - person Jaco du Toit; 29.11.2013