ZXing Library中的findViewbyId(R.id.viewfinder_view)中的NullPointerException

时间:2014-06-17 14:53:21

标签: android zxing

我正在尝试使用我的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)

3 个答案:

答案 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
}

<强>更新

这就是你收到错误的原因 -

您已复制项目的用户界面,包括CaptureActivityViewfinderView。不要那样做 - 不行,不完全允许。您需要编写自己的应用并将您理解的部分重用到您理解的应用中。实际上你确实粘贴了一堆不完整的代码,当你这样做时它不起作用。

按意图进行整合,或编写自己的应用。无论如何,请不要像这样使用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());

尝试以下替代方案:

  1. getApplicationContext()
  2. CameraActivity.this
  3. 片段的getActivity()
  4. P.S。我从来没有使用zxing库,但是如果你设置的cameraManager是null,那么它将给出空指针异常。

    您可以做的第一件事是检查cameraManager == null并查看它是否为空。