【问题标题】:ClassNotFoundException while Detecting ZXing BarCode scanner in android在 android 中检测 ZXing 条码扫描仪时出现 ClassNotFoundException
【发布时间】:2013-05-27 11:45:31
【问题描述】:

我正在使用以下行来检测 ZXing 条形码扫描仪,但它引发了名为 ClassNotFoundException 的异常。

try{
  Intent intent = new Intent("com.google.zxing.client.android.SCAN");

   startActivityForResult(intent, 0);

}
catch(Exception e)
{
 //calling Alert message which says to download the application
}

ClassNotFoundExceptioncom.google.zxing.client.android.CaptureActivity 没有找到。但是我不明白为什么这个异常没有被处理,即使我把它放在 try,catch Blocks 中。

完整代码:

我也尝试过使用 isIntentAvailable(Context context, Intent intent) 方法,但我仍然遇到同样的错误。

 try{
      Intent intent = new Intent("com.google.zxing.client.android.SCAN");


      if(isIntentAvailable(this,  intent)){

        runOnUiThread(new Runnable() {
        public void run() {
        pd.dismiss();
        }
        });

        startActivityForResult(intent, 0);
        }

        else{
         AlertDialog diaBox = installDialogBox();

         diaBox.show();
        }
        }
        catch (Exception e) {
        pd.dismiss();
        Log.e("in Exception","Exception");
        e.printStackTrace();

        }

方法:检查应用程序是否安装。

 public static boolean isIntentAvailable(Context context, Intent intent) {
final PackageManager packageManager =  context.getPackageManager();
List<ResolveInfo> list =packageManager.queryIntentActivities(intent,PackageManager.MATCH_DEFAULT_ONLY);

return list.size() > 0;
            }

Logcat 错误:

05-24 10:24:36.507: E/AndroidRuntime(9159): FATAL EXCEPTION: main
05-24 10:24:36.507: E/AndroidRuntime(9159): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.zzzzz.xxxxx.activies/com.google.zxing.client.android.CaptureActivity}: java.lang.ClassNotFoundException: com.google.zxing.client.android.CaptureActivity in loader dalvik.system.PathClassLoader[/data/app/com.sparx.maternity.activies-2.apk]
    05-24 10:24:36.507: E/AndroidRuntime(9159):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1618)
    05-24 10:24:36.507: E/AndroidRuntime(9159):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1716)
    05-24 10:24:36.507: E/AndroidRuntime(9159):     at android.app.ActivityThread.access$1500(ActivityThread.java:124)
    05-24 10:24:36.507: E/AndroidRuntime(9159):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:968)
    05-24 10:24:36.507: E/AndroidRuntime(9159):     at android.os.Handler.dispatchMessage(Handler.java:99)
    05-24 10:24:36.507: E/AndroidRuntime(9159):     at android.os.Looper.loop(Looper.java:123)
    05-24 10:24:36.507: E/AndroidRuntime(9159):     at android.app.ActivityThread.main(ActivityThread.java:3806)
    05-24 10:24:36.507: E/AndroidRuntime(9159):     at java.lang.reflect.Method.invokeNative(Native Method)
    05-24 10:24:36.507: E/AndroidRuntime(9159):     at java.lang.reflect.Method.invoke(Method.java:507)
    05-24 10:24:36.507: E/AndroidRuntime(9159):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
    05-24 10:24:36.507: E/AndroidRuntime(9159):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
    05-24 10:24:36.507: E/AndroidRuntime(9159):     at dalvik.system.NativeStart.main(Native Method)
    05-24 10:24:36.507: E/AndroidRuntime(9159): Caused by: java.lang.ClassNotFoundException: com.google.zxing.client.android.CaptureActivity in loader dalvik.system.PathClassLoader[/data/app/com.sparx.maternity.activies-2.apk]
    05-24 10:24:36.507: E/AndroidRuntime(9159):     at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:240)
    05-24 10:24:36.507: E/AndroidRuntime(9159):     at java.lang.ClassLoader.loadClass(ClassLoader.java:551)
    05-24 10:24:36.507: E/AndroidRuntime(9159):     at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
    05-24 10:24:36.507: E/AndroidRuntime(9159):     at android.app.Instrumentation.newActivity(Instrumentation.java:1021)
    05-24 10:24:36.507: E/AndroidRuntime(9159):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1610)
    05-24 10:24:36.507: E/AndroidRuntime(9159):     ... 11 more

请回复。

【问题讨论】:

  • 添加:catch (ClassNotFoundException e) { } 看看结果。
  • 这没有提供问题的答案。要批评或要求作者澄清,请在其帖子下方发表评论。
  • 这是最糟糕的答案,伙计。你在想什么?

标签: android zxing


【解决方案1】:

在调用前检查意图是否可用

public static boolean isIntentAvailable(Context context, Intent intent) {
    final PackageManager packageManager = context.getPackageManager();
      List<ResolveInfo> list =
            packageManager.queryIntentActivities(intent,
                    PackageManager.MATCH_DEFAULT_ONLY);
    return list.size() > 0;
}

也可以试试

 try {
          ....
        } catch ( ClassNotFoundException e ) {
            // TODO handle me
        }

【讨论】:

  • 如果我使用了上面的代码,如果应用程序没有安装在我的设备中,我的应用程序会崩溃并显示上述错误。如果应用程序安装在我的设备中,它可以正常工作。
  • 我不明白为什么我不能处理异常
  • 例外是ClassNotFoundException,而不是ActivityNotFoundException。这不是问题。
【解决方案2】:

需要查询是否有这个应用程序。而且不是为了捕捉异常

Intent intent = new Intent("com.google.zxing.client.android.SCAN"); 
List<ResolveInfo> list = getPackageManager().queryIntentActivities( intent, 0 );

list.size() > 0 , 表示有目标应用程序。

【讨论】:

  • 例外是ClassNotFoundException,而不是ActivityNotFoundException
【解决方案3】:

您正在通过Intent 集成。但我猜你也试图在你的项目中包含我们的代码和清单的一部分。不要这样做。这不是必需的,并且会导致这样的错误,因为您还告诉 Android 代码在您的应用程序中。不是,也不应该是。

【讨论】:

    【解决方案4】:

    这个问题已在 SO 中以多种方式得到解答。 Zxing 有时很难整合。关注帮助其他人的旧帖子,重做你的集成,我确定你错过了一些步骤。

    thisthis

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-03
      • 2013-07-09
      • 2015-09-30
      • 2012-05-21
      • 2014-12-11
      • 1970-01-01
      • 1970-01-01
      • 2014-08-07
      相关资源
      最近更新 更多