【问题标题】:Class not found when using zxing使用 zxing 时找不到类
【发布时间】:2012-08-11 03:29:32
【问题描述】:

所以我正在开发一个可以扫描二维码的应用程序。我下载了 ZXing 库,使用 apache ant 构建它以获取 core.jar,将其放在我的项目文件夹中,并将其作为 jar 添加到构建路径中。不,当我尝试执行以下操作时:

Intent intent = new Intent("com.google.zxing.client.android.SCAN");
intent.putExtra("SCAN_MODE", "QR_CODE_MODE"); 
startActivityForResult(intent, 0);

我收到以下错误:

08-14 18:52:01.191: E/AndroidRuntime(617): FATAL EXCEPTION: main
08-14 18:52:01.191: E/AndroidRuntime(617): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.android.Wowser/com.google.zxing.client.android.CaptureActivity}: java.lang.ClassNotFoundException: com.google.zxing.client.android.CaptureActivity in loader dalvik.system.PathClassLoader[/data/app/com.android.Wowser-1.apk]
08-14 18:52:01.191: E/AndroidRuntime(617):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1569)
08-14 18:52:01.191: E/AndroidRuntime(617):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
08-14 18:52:01.191: E/AndroidRuntime(617):  at android.app.ActivityThread.access$1500(ActivityThread.java:117)
08-14 18:52:01.191: E/AndroidRuntime(617):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
08-14 18:52:01.191: E/AndroidRuntime(617):  at android.os.Handler.dispatchMessage(Handler.java:99)
08-14 18:52:01.191: E/AndroidRuntime(617):  at android.os.Looper.loop(Looper.java:123)
08-14 18:52:01.191: E/AndroidRuntime(617):  at android.app.ActivityThread.main(ActivityThread.java:3683)
08-14 18:52:01.191: E/AndroidRuntime(617):  at java.lang.reflect.Method.invokeNative(Native Method)
08-14 18:52:01.191: E/AndroidRuntime(617):  at java.lang.reflect.Method.invoke(Method.java:507)
08-14 18:52:01.191: E/AndroidRuntime(617):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
08-14 18:52:01.191: E/AndroidRuntime(617):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
08-14 18:52:01.191: E/AndroidRuntime(617):  at dalvik.system.NativeStart.main(Native Method)
08-14 18:52:01.191: E/AndroidRuntime(617): Caused by: java.lang.ClassNotFoundException: com.google.zxing.client.android.CaptureActivity in loader dalvik.system.PathClassLoader[/data/app/com.android.Wowser-1.apk]
08-14 18:52:01.191: E/AndroidRuntime(617):  at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:240)
08-14 18:52:01.191: E/AndroidRuntime(617):  at java.lang.ClassLoader.loadClass(ClassLoader.java:551)
08-14 18:52:01.191: E/AndroidRuntime(617):  at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
08-14 18:52:01.191: E/AndroidRuntime(617):  at android.app.Instrumentation.newActivity(Instrumentation.java:1021)
08-14 18:52:01.191: E/AndroidRuntime(617):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1561)
08-14 18:52:01.191: E/AndroidRuntime(617):  ... 11 more

<?xml version="1.0" encoding="utf-8"?>

<uses-sdk android:minSdkVersion="10" />

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.CAMERA"/>

<application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name" >
    <activity
        android:name="com.android.Wowser.DealsActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity
        android:name="com.google.zxing.client.android.CaptureActivity"
        android:configChanges="orientation|keyboardHidden"
        android:screenOrientation="landscape"
        android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
        android:windowSoftInputMode="stateAlwaysHidden" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
        <intent-filter>
            <action android:name="com.google.zxing.client.android.SCAN" />

            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>
    <activity android:name=".Register" />
    <activity android:name=".SignIn" />
    <activity android:name=".Options" />
    <activity android:name=".Scan" />
</application>

谁能告诉我如何设置 Zxing 以正确使用它或我可能出错的地方?非常感谢任何帮助。

【问题讨论】:

  • 你能发布你的清单文件吗?
  • 不要不要复制和粘贴我们的清单!
  • @Sean Owen。 Zxing 是最好的 android 条码扫描器。但是为什么没有更好的方法来集成它而不安装您的应用程序呢?你应该为 android 创建一个库来轻松处理这个问题。
  • 嗨@SeanOwen,我从教程中得到清单条目,抱歉。你能告诉我集成zxing的最佳方式吗?
  • @SeanOwen zxing 是它的优秀作品!请发布有关“如何将其集成到应用程序中”的教程/指南(无需安装应用程序)。

标签: android build zxing classnotfoundexception


【解决方案1】:

您会收到此错误的原因只有三个:

  1. 该类确实不存在。如果您使用官方示例中的代码并获取此代码,请确保您拥有最新版本的库
  2. 您尚未将 jar 添加到构建路径中。要解决此问题,请右键单击 Eclipse 中的 jar,然后执行 Build Path ► Add to Build Path。
  3. 您的 jar 不在 /libs 文件夹中。当您将 jar 添加到构建路径时会发生这种情况,但较新版本的 ADT 需要它位于 /libs 中。把它放在那里,然后重新添加到构建路径中。

【讨论】:

    【解决方案2】:

    您是否安装了 Zxing Barcode Scanner 应用程序?您必须安装应用程序才能使用意图进行扫描。

    CaptureActivity 不在 core.jar 库中。如果您不想安装并集成到您自己的应用程序中,则必须将他们的 Android 项目作为库包含在内。这是很多混乱。更好地安装他们的应用程序。

    另一种方法是使用Zbar 库。我发现这个库易于使用,不需要安装他们的应用程序。唯一的问题是它是否支持您想要的条形码。我会建议检查一下。

    编辑:

    一旦我尝试使用此链接本地包含 zxing。

    Add ZXing barcode scanning natively in your Android project

    ZXing QR Reader Direct Integration

    你可以看看这个。

    【讨论】:

    • 我目前正在使用模拟器进行开发,那么我该如何安装扫描仪应用程序呢?这是否也意味着如果某人的手机上没有条形码扫描仪应用程序,该应用程序将无法运行?
    • 我在您的清单中看到您使用了 CaptureActivity。您是否将他们的 Android 项目作为库包含在内?或者您是否将 CaptureActivity 复制到您的项目中?
    • 目前我没有这样做,因为我认为它是唯一需要的 core.jar 文件,我从一个没有提到添加库的教程中获得了清单条目。我该怎么做这样做?
    • 编辑了我的答案。完全按照教程进行操作。
    • 您不需要安装这些类中的任何一个即可通过 Intent 进行集成,这是最好的方式。问题是,他试图嵌入代码,非常不正确,而且不知道该怎么做。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-10
    • 2021-11-29
    • 2015-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多