Я создаю приложения 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);