2013-06-19 62 views
0

几周来,我一直试图使用ZXING库来创建一个应用程序,该应用程序生成并显示包含文本的简单QR码。我已阅读了有关此主题的其他所有问题,但无法使其正常工作。Android QR生成器

我觉得我很接近,此刻我有core.jar作为我的项目的参考,我也有zxing文件夹中的android库作为引用库。

这里是我的代码:

String uniqueID="hi"; 
    BarcodeFormat barcodeFormat = BarcodeFormat.QR_CODE; 
    int width0 = 500; 
    int height0 = 500; 
    QRCodeWriter writer = new QRCodeWriter(); 
    try 
    { 
     EnumMap<EncodeHintType, Object> hint = new EnumMap<EncodeHintType, Object>(EncodeHintType.class); 
     hint.put(EncodeHintType.CHARACTER_SET, "UTF-8"); 
     BitMatrix bitMatrix = writer.encode(uniqueID, barcodeFormat, width0, height0, hint); 
     int width = bitMatrix.getWidth(); 
     int height = bitMatrix.getHeight(); 
     int[] pixels = new int[width * height]; 
     for (int y = 0; y < height; y++) 
     { 
      int offset = y * width; 
      for (int x = 0; x < width; x++) 
      { 

       pixels[offset + x] = bitMatrix.get(x, y) ? android.graphics.Color.BLACK : android.graphics.Color.WHITE; 
      } 
     } 

     Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); 
     bitmap.setPixels(pixels, 0, width, 0, 0, width, height); 
     ImageView imageview = (ImageView)findViewById(R.id.qrCode); 
     imageview.setImageBitmap(bitmap); 
    } catch (WriterException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

此代码没有任何错误。当我运行该应用并点击它运行该代码按钮,我得到了下面的logcat输出:

06-19 15:33:34.493: W/dalvikvm(1340): VFY: unable to resolve static field 1076 (QR_CODE) in Lcom/google/zxing/BarcodeFormat; 
06-19 15:33:34.493: D/dalvikvm(1340): VFY: replacing opcode 0x62 at 0x0002 
06-19 15:33:34.493: D/dalvikvm(1340): DexOpt: unable to opt direct call 0x114f at 0x0a in Lcom/example/qrgen/MainActivity;.genQR 
06-19 15:33:34.493: I/dalvikvm(1340): DexOpt: unable to optimize static field ref 0x043c at 0x14 in Lcom/example/qrgen/MainActivity;.genQR 
06-19 15:33:34.963: D/libEGL(1340): loaded /system/lib/egl/libEGL_mali.so 
06-19 15:33:34.993: D/libEGL(1340): loaded /system/lib/egl/libGLESv1_CM_mali.so 
06-19 15:33:34.998: D/libEGL(1340): loaded /system/lib/egl/libGLESv2_mali.so 
06-19 15:33:35.003: D/(1340): Device driver API match 
06-19 15:33:35.003: D/(1340): Device driver API version: 10 
06-19 15:33:35.003: D/(1340): User space API version: 10 
06-19 15:33:35.003: D/(1340): mali: REVISION=Linux-r2p4-02rel0 BUILD_DATE=Tue Oct 16 15:37:13 KST 2012 
06-19 15:33:35.073: D/OpenGLRenderer(1340): Enabling debug mode 0 
06-19 15:33:38.883: D/AndroidRuntime(1340): Shutting down VM 
06-19 15:33:38.883: W/dalvikvm(1340): threadid=1: thread exiting with uncaught exception (group=0x420312a0) 
06-19 15:33:38.913: E/AndroidRuntime(1340): FATAL EXCEPTION: main 
06-19 15:33:38.913: E/AndroidRuntime(1340): java.lang.IllegalStateException: Could not execute method of the activity 
06-19 15:33:38.913: E/AndroidRuntime(1340):  at android.view.View$1.onClick(View.java:3691) 
06-19 15:33:38.913: E/AndroidRuntime(1340):  at android.view.View.performClick(View.java:4211) 
06-19 15:33:38.913: E/AndroidRuntime(1340):  at android.view.View$PerformClick.run(View.java:17267) 
06-19 15:33:38.913: E/AndroidRuntime(1340):  at android.os.Handler.handleCallback(Handler.java:615) 
06-19 15:33:38.913: E/AndroidRuntime(1340):  at android.os.Handler.dispatchMessage(Handler.java:92) 
06-19 15:33:38.913: E/AndroidRuntime(1340):  at android.os.Looper.loop(Looper.java:137) 
06-19 15:33:38.913: E/AndroidRuntime(1340):  at android.app.ActivityThread.main(ActivityThread.java:4898) 
06-19 15:33:38.913: E/AndroidRuntime(1340):  at java.lang.reflect.Method.invokeNative(Native Method) 
06-19 15:33:38.913: E/AndroidRuntime(1340):  at java.lang.reflect.Method.invoke(Method.java:511) 
06-19 15:33:38.913: E/AndroidRuntime(1340):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1006) 
06-19 15:33:38.913: E/AndroidRuntime(1340):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:773) 
06-19 15:33:38.913: E/AndroidRuntime(1340):  at dalvik.system.NativeStart.main(Native Method) 
06-19 15:33:38.913: E/AndroidRuntime(1340): Caused by: java.lang.reflect.InvocationTargetException 
06-19 15:33:38.913: E/AndroidRuntime(1340):  at java.lang.reflect.Method.invokeNative(Native Method) 
06-19 15:33:38.913: E/AndroidRuntime(1340):  at java.lang.reflect.Method.invoke(Method.java:511) 
06-19 15:33:38.913: E/AndroidRuntime(1340):  at android.view.View$1.onClick(View.java:3686) 
06-19 15:33:38.913: E/AndroidRuntime(1340):  ... 11 more 
06-19 15:33:38.913: E/AndroidRuntime(1340): Caused by: java.lang.NoClassDefFoundError: com.google.zxing.BarcodeFormat 
06-19 15:33:38.913: E/AndroidRuntime(1340):  at com.example.qrgen.MainActivity.genQR(MainActivity.java:36) 
06-19 15:33:38.913: E/AndroidRuntime(1340):  ... 14 more 

看来,问题在于com.google.zxing.BarcodeFormat,但我检查了我引用的库和该类确实存在。任何想法可能是错误的?

回答

2

你最近更新了你的ADT版本吗?因为最新版本(ADT 22)会导致依赖关系(例如ZXing在您的情况下)与NoClassDefFoundError崩溃......在这种情况下,它与您的代码绝对没有关系。

最常见的解决方案是already on stackoverflow,检查它是否有窍门!

+0

非常感谢。最后一切正常 – Josh