我正在尝试使用我的Android应用程序集成ZXing库。
我按照相应的步骤将ZXing2.3构建为一个lib项目(通过在android /中添加core / as jar) 现在这个ZXing lib项目似乎编译得很好。
然后我在我的应用程序中引用它,但是当启动Capture Activity时,会出现NullPointerException,因为它无法找到特定的自定义视图。但是当我查看相应的布局文件时,一切似乎都很好。我没有以任何方式触摸/修改ZXing lib代码。
所以我认为我错过了一些整合步骤。
有人可以帮我解决这个问题吗?
由于 晴天
请注意:ZXING LIB代码没有复制到我的APP中。 LIB被称为ANDROID LIB项目。
06-17 20:27:41.996: E/AndroidRuntime(13408): java.lang.RuntimeException: Unable to resume activity {com.demo.abcdemo/com.google.zxing.client.android.CaptureActivity}: java.lang.NullPointerException
06-17 20:27:41.996: E/AndroidRuntime(13408): at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2946)
06-17 20:27:41.996: E/AndroidRuntime(13408): at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2975)
06-17 20:27:41.996: E/AndroidRuntime(13408): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2368)
06-17 20:27:41.996: E/AndroidRuntime(13408): at android.app.ActivityThread.access$900(ActivityThread.java:161)
06-17 20:27:41.996: E/AndroidRuntime(13408): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1265)
06-17 20:27:41.996: E/AndroidRuntime(13408): at android.os.Handler.dispatchMessage(Handler.java:102)
06-17 20:27:41.996: E/AndroidRuntime(13408): at android.os.Looper.loop(Looper.java:157)
06-17 20:27:41.996: E/AndroidRuntime(13408): at android.app.ActivityThread.main(ActivityThread.java:5356)
06-17 20:27:41.996: E/AndroidRuntime(13408): at java.lang.reflect.Method.invokeNative(Native Method)
06-17 20:27:41.996: E/AndroidRuntime(13408): at java.lang.reflect.Method.invoke(Method.java:515)
06-17 20:27:41.996: E/AndroidRuntime(13408): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
06-17 20:27:41.996: E/AndroidRuntime(13408): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
06-17 20:27:41.996: E/AndroidRuntime(13408): at dalvik.system.NativeStart.main(Native Method)
06-17 20:27:41.996: E/AndroidRuntime(13408): Caused by: java.lang.NullPointerException
06-17 20:27:41.996: E/AndroidRuntime(13408): at com.google.zxing.client.android.CaptureActivity.onResume(CaptureActivity.java:157)
06-17 20:27:41.996: E/AndroidRuntime(13408): at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1210)
06-17 20:27:41.996: E/AndroidRuntime(13408): at android.app.Activity.performResume(Activity.java:5505)
06-17 20:27:41.996: E/AndroidRuntime(13408): at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2936)
答案 0 :(得分:0)
错误:
viewfinderView = (ViewfinderView) findViewById(R.id.viewfinder_view);
viewfinderView.setCameraManager(cameraManager);
这表明 -
您正尝试在setCameraManager
上使用viewfinderView
方法,该方法为空。
可能的原因:
1)CaptureActivity.java
文件中定义的xml文件没有标识viewfinder_view
。
2)您的CaptureActivity.java文件有错误的方法来设置应用程序无法识别的布局xml。
正确的方式 -
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.CaptureActivity);
// some more code
}
<强>更新强>
这就是你收到错误的原因 -
您已复制项目的用户界面,包括CaptureActivity
和ViewfinderView
。不要那样做 - 不行,不完全允许。您需要编写自己的应用并将您理解的部分重用到您理解的应用中。实际上你确实粘贴了一堆不完整的代码,当你这样做时它不起作用。
按意图进行整合,或编写自己的应用。无论如何,请不要像这样使用com.google.zxing.client.android
。
正如提问者所引用的那样 -
通过更改整个Zxing的包名来解决问题 库项目,包括意图动作名称。很明显 发生这种情况是因为
ViewFinderView
无法找到findViewById
。
在这里完成 - android-zxing-captureactivity-npe-on-viewfinderview。
答案 1 :(得分:0)
我找到了这个问题背后的原因。
ZXing源代码使用R.id.someViewId
有许多switch语句
现在这些在android中不起作用,必须通过if语句进行比较。
现在,当我最初在我的应用程序中包含对此lib的引用时,我没有收到这些错误。我想这是因为ZXing lib没有正确编译。所以所有的观点都不存在,因此Null Pointer Exception。
当我最终清理并编译代码时,我发现了switch语句的所有这些错误。如果这些转换为if语句,则lib项目可以与任何应用程序一起顺利运行。
有了上述内容,我实际上已经请求@Sean Owen,这个lib项目的所有者之一。 我确信你必须有一些理由来为R.id.someViewId提供switch语句,但由于它不起作用,我相信它一定不能在你的最后工作。 你可以修改代码,以便可以使用lib吗?
我想再提一次,我不是直接将ZXing lib代码复制到我的应用程序中,我只是将它用作lib项目并在我的应用程序中引用。
谢谢和问候, 晴天
答案 2 :(得分:-1)
在我看来,这条线似乎很可疑:
cameraManager = new CameraManager(getApplication());
尝试以下替代方案:
P.S。我从来没有使用zxing库,但是如果你设置的cameraManager是null,那么它将给出空指针异常。
您可以做的第一件事是检查cameraManager == null并查看它是否为空。