为什么当我试图从Java连接设备监听模块时,我的Android本机应用程序会立即崩溃
我有一个java模块,可以检测读卡器外围设备是否连接到android手机。它在完整的android版本中运行良好,如果外围设备未连接,则会显示祝酒词,这是正常工作的完整本机java代码:为什么当我试图从Java连接设备监听模块时,我的Android本机应用程序会立即崩溃,java,android,react-native,Java,Android,React Native,我有一个java模块,可以检测读卡器外围设备是否连接到android手机。它在完整的android版本中运行良好,如果外围设备未连接,则会显示祝酒词,这是正常工作的完整本机java代码: public class MainActivity extends AppCompatActivity { private SwipeHandler handler; @Override protected void onCreate(Bundle savedInstanceState) { sup
public class MainActivity extends AppCompatActivity {
private SwipeHandler handler;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
run();
}
public void run(){
SwipeListener listener = new SwipeListener() {
@Override
public void onDisconnected(SwipeEvent swipeEvent) {
Toast someToast = Toast.makeText(getApplicationContext(),"Card is disconnected!", Toast.LENGTH_LONG);
someToast.show();
}
@Override
public void onConnected(SwipeEvent swipeEvent) {
}
@Override
public void onStarted(SwipeEvent swipeEvent) {
}
@Override
public void onStopped(SwipeEvent swipeEvent) {
}
@Override
public void onReadData(SwipeEvent swipeEvent) {
}
@Override
public void onParseData(SwipeEvent swipeEvent) {
}
@Override
public void onICDetected(SwipeEvent swipeEvent) {
}
};
handler = new SwipeHandler(this);
handler.addSwipeListener(listener);
handler.setReadonly(true);
handler.powerOn();
}
}
现在,在遵循react本机文档中的模块桥接说明之后,我已经编写了下面的代码,将此功能引入react本机应用程序。模块代码:
public class mreaderManager extends ReactContextBaseJavaModule {
private SwipeHandler handler;
public mreaderManager(ReactApplicationContext reactContext){
super(reactContext);
run();
}
//override getName function
@Override
public String getName(){
return "mreaderManager";
}
//function body
@ReactMethod
public void greetUser(String name, Callback callback){
String greeting = "Welcome " + name;
callback.invoke(greeting);
}
public void run(){
//declare swipe listener
SwipeListener listener = new SwipeListener() {
@Override
public void onDisconnected(SwipeEvent swipeEvent) {
Toast someToast = Toast.makeText(getReactApplicationContext(),"Card is disconnected!", Toast.LENGTH_LONG);
someToast.show();
}
@Override
public void onConnected(SwipeEvent swipeEvent) {
}
@Override
public void onStarted(SwipeEvent swipeEvent) {
}
@Override
public void onStopped(SwipeEvent swipeEvent) {
}
@Override
public void onReadData(SwipeEvent swipeEvent) {
}
@Override
public void onParseData(SwipeEvent swipeEvent) {
}
@Override
public void onICDetected(SwipeEvent swipeEvent) {
}
};
//instantiate swipe handler
handler = new SwipeHandler(getReactApplicationContext());
handler.addSwipeListener(listener);
handler.setReadonly(true);
handler.powerOn();
}
}
以下是软件包代码:
public class mreaderPackage implements ReactPackage {
@Override
public List
<Class<? extends JavaScriptModule>>
createJSModules(){
return Collections.emptyList();
}
@Override
public List
<ViewManager> createViewManagers(ReactApplicationContext reactContext){
return Collections.emptyList();
}
@Override
public List
<NativeModule> createNativeModules(ReactApplicationContext reactContext){
List<NativeModule> modules = new ArrayList<>();
modules.add(new mreaderManager(reactContext));
return modules;
}
}
public类mreaderPackage实现ReactPackage{
@凌驾
公开名单
更新:
在仔细考虑了一下情况之后,我注意到imagpay库正在使用耳机插头来完成它的工作,并且耳机插头的用途是“粘性的”。这意味着耳机的插入意图可以挂在系统中,应用程序在注册接收器后立即接收。这可能解释了为什么这些事件在SwipeHander仍在构建自身时出现时会产生错误。因此,一种可能的解决方法(假设上述分析是正确的)是在创建新的SwipeHandler之前读取现有意图。下面是一个可能有效的示例(摘自):
注意:我认为创建、注册和注销可能应该移动到活动的onStart()和onStop()生命周期方法
从logcat中,错误是由于在SwipeHandler类中接收到NullPointerException引起的。您尚未发布SwipeHandler类的代码,因此我无法进一步诊断。问题发生在此处:
com.imagpay.SwipeHandler.isReadable(SourceFile:655)
它试图从isReadable方法中的null对象中计算出状态
可能是imagpay库开发用于Android应用程序,而不是专门用于React本机应用程序。在这种情况下,问题可能源于您在每种情况下创建SwipeHandler的方式。在上面的代码中有两个地方可以初始化SwipeHandler,其中一个是React本机v版本:
handler = new SwipeHandler(getReactApplicationContext());
也许您可以尝试将其引用到实际的Android应用程序上下文中。例如:
handler = new SwipeHandler(getReactApplicationContext().getBaseContext());
更新:
在仔细考虑了一下情况之后,我注意到imagpay库正在使用耳机插头来完成它的工作,并且耳机插头的用途是“粘性的”。这意味着耳机的插入意图可以挂在系统中,应用程序在注册接收器后立即接收。这可能解释了为什么这些事件在SwipeHander仍在构建自身时出现时会产生错误。因此,一种可能的解决方法(假设上述分析是正确的)是在创建新的SwipeHandler之前读取现有意图。下面是一个可能有效的示例(摘自):
注意:我认为创建、注册和注销可能应该移动到活动的onStart()和onStop()生命周期方法
从logcat中,错误是由于在SwipeHandler类中接收到NullPointerException引起的。您尚未发布SwipeHandler类的代码,因此我无法进一步诊断。问题发生在此处:
com.imagpay.SwipeHandler.isReadable(SourceFile:655)
它试图从isReadable方法中的null对象中计算出状态
可能是imagpay库开发用于Android应用程序,而不是专门用于React本机应用程序。在这种情况下,问题可能源于您在每种情况下创建SwipeHandler的方式。在上面的代码中有两个地方可以初始化SwipeHandler,其中一个是React本机v版本:
handler = new SwipeHandler(getReactApplicationContext());
也许您可以尝试将其引用到实际的Android应用程序上下文中。例如:
handler = new SwipeHandler(getReactApplicationContext().getBaseContext());
您是否尝试过将run方法移动到onStart,或者将其延迟放到线程中?(显然必须在onStop中清理它)。另外,你能从LogCat添加一些崩溃信息吗?您好,我在从我的设备获取崩溃日志时遇到问题。我刚刚通过电子邮件给自己发送了一个。我编辑了原始问题以显示崩溃日志。您尝试将run方法移动到onStart,或者延迟将其放入线程中?(显然必须在onStop中清理)。另外,你能从LogCat添加一些崩溃信息吗?你好,我在从我的设备获取崩溃日志时遇到了问题。我刚刚通过电子邮件给自己发送了一个。我编辑了原始问题以显示崩溃日志,swipehandler类来自一个.jar库。我已经将android项目和react本机项目加载到github,这样你就可以我看一下代码:本机和RN版本,我只是想补充一下,当外围设备连接时,应用程序不会崩溃,但屏幕是空白的。这里有一个指向swipehandler代码的链接。特别抱歉,我假设swipehandler是你的。你可能需要联系库提供商,看看你是否在t初始化,以及库是否与React-Native兼容。提供商甚至不知道React-Native是什么lol。我发现这和在应用程序关闭后销毁处理程序有关。因为我必须重新启动手机或连接外围设备,以便应用程序在初始运行后运行。是否有任何代码会杀死destroy上的任何设备侦听代码?好的,swipehandler类来自一个.jar库。我已经将android项目和react native项目加载到github,这样您可以查看代码:native和RN版本。我只是想添加,当外围设备连接时,应用程序不会崩溃,但屏幕是空白的。下面是一个示例指向swipehandler代码的链接特别抱歉,我假设swipehandler是您的。您可能需要联系库提供商,查看初始化过程中是否缺少某些内容,以及库是否为co