views:

1045

answers:

2

Since I don't own a G1 for development purposes, I am doing my best with the emulator. This said, I am trying to scan a JPEG image or a PNG image in my sdCard, with the ZXing (Zebra Zrossing) library.

I tried to change the code in the Android project, so it would scan from an image in the sdCard, instead from the camera, without any luck.

What I did next is probably the root of my problem.

I tried to use the JAVASE code, within a new Android Project, to provide an image to the "modified" CommandLineRunner, and here is the thing:

Eclipse would build the project, but won't run it. The VM log throuws me this message among others:

**02-08 20:47:45.916: WARN/dalvikvm(619): VFY: unable to resolve static method 939: Ljavax/imageio/ImageIO;.read (Ljava/io/File;)Ljava/awt/image/BufferedImage; 02-08 20:47:45.926: WARN/dalvikvm(619): VFY: rejecting opcode 0x71 at 0x0004 02-08 20:47:45.926: WARN/dalvikvm(619): VFY: rejected Lcom/magoco/fread/FRead;.decode2 (Ljava/io/File;Ljava/util/Hashtable;Ljava/lang/String;)Ljava/lang/String; 02-08 20:47:45.926: WARN/dalvikvm(619): Verifier rejected class Lcom/magoco/fread/FRead; 02-08 20:47:45.926: WARN/dalvikvm(619): Class init failed in newInstance call (Lcom/magoco/fread/FRead;) 02-08 20:47:45.926: DEBUG/AndroidRuntime(619): Shutting down VM 02-08 20:47:45.926: WARN/dalvikvm(619): threadid=3: thread exiting with uncaught exception (group=0x40010e28) 02-08 20:47:45.937: ERROR/AndroidRuntime(619): Uncaught handler: thread main exiting due to uncaught exception 02-08 20:47:45.946: ERROR/AndroidRuntime(619): java.lang.VerifyError: com.magoco.fread.FRead **

I searched the web for an answer and I got someone saying that this is common error on the Dalvikvm due to the fact that there is might be a class or library that was precompiled (true, outside Eclipse) and the VM wouldn't be able to use it.

I am posting my code in the main Activity:

package com.magoco.fread;

import java.awt.image.BufferedImage; import java.io.BufferedInputStream; import java.io.ByteArrayInputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.util.Hashtable;

import javax.imageio.ImageIO; import javax.imageio.ImageReader; import javax.imageio.stream.ImageInputStream;

import android.app.Activity; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Bundle; import android.widget.TextView;

import com.google.zxing.DecodeHintType; import com.google.zxing.MonochromeBitmapSource; import com.google.zxing.MultiFormatReader; import com.google.zxing.ReaderException; import com.google.zxing.Result; import com.google.zxing.client.result.ParsedResult; import com.google.zxing.client.result.ResultParser;

public class FRead extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); TextView tv = (TextView) this.findViewById(R.id.BarcodeResult); try { tv.setText(this.decodeOneArgument2("", false)); } catch (Exception e) { e.printStackTrace(); } }

public String decodeOneArgument2(String argument, boolean dumpResults)
  throws Exception {
 String barcode = "";
 // File inputFile = new File(argument);
 File inputFile = new File("sdcard/dcim/pueblo.JPG");

 /* TESTING THAT I'VE GOT A FILE */
 System.out.println("FILE " + inputFile.toString());

 // decode(new URI(argument), hints);
 decode2(inputFile, null, barcode);
 return barcode;

}

public String decode2(File f, Hashtable<DecodeHintType, Object> hints,
  String barcode) throws IOException {

 /* IF I COMMENT THE NEXT LINE, IT RUNS BUT OF COURSE NO RESULT */
 BufferedImage image;
 try {
  image = ImageIO.read(f);
 } catch (IllegalArgumentException iae) {
  throw new FileNotFoundException("Resource not found: " + f);
 }
 try {
  MonochromeBitmapSource source = new BufferedImageMonochromeBitmapSource(
    image);
  Result result = new MultiFormatReader().decode(source, hints);
  ParsedResult parsedResult = ResultParser.parseResult(result);
  barcode = " format: " + result.getBarcodeFormat()+ result.getText() + "\nParsed result:\n"+ parsedResult.getDisplayResult();
  System.out.println(" format: " + result.getBarcodeFormat()+ result.getText() + "\nParsed result:\n"+ parsedResult.getDisplayResult());
  //return result;
 } catch (ReaderException e) {
  System.out.println(": No barcode found");
  return null;
 }
 return barcode;
}

}

Thanks in Advance

monn3t

A: 

This is Sean from the project in question.

You are trying to use the code intended for Java SE in Android. Some of the libraries in Java SE are not in Android, like ImageIO.

Look at the code in android/ which uses Android-specific classes to load images.

Sean Owen
It Figures, I had a feeling that what I was doing was wrong.I'll give it a try and let you knowRegards!monn3t
+1  A: 

Hai, I tried to extract the data from the Barcodes and these are the steps i followed.

1.Download ZXing 1.3 and extract it.

2.Add the core/src and androidtest/src from the extracted zxing floder to the android application by setting the property. use this link to set the property,http://groups.google.com/group/zxing/browse_thread/thread/7d8693e6e42408f2

Now include the following code,

package payoda.android.zxingApp;
import android.app.Activity;
import android.database.CursorJoiner.Result;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.widget.TextView;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.MonochromeBitmapSource;
import com.google.zxing.MultiFormatReader;
import com.google.zxing.Reader;
import com.google.zxing.ReaderException;
import com.google.zxing.qrcode.QRCodeReader;
import com.google.zxing.client.androidtest.*;
import com.google.zxing.common.BaseMonochromeBitmapSource;


public class ZXingApplication1 extends Activity 
{
  TextView tv;
  com.google.zxing.Result result;

  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    tv=(TextView)findViewById(R.id.text);
    Bitmap bitmap = BitmapFactory.decodeResource(getResources(),R.drawable.bar2); 
    MultiFormatReader reader1=new MultiFormatReader();//For all barcode formats
    QRCodeReader reader=new QRCodeReader();//Only for QRCode format

   try 
    {

       result=reader1.decode(new RGBMonochromeBitmapSource(bitmap));
       tv.setText(result.getText());
 } 
    catch (Exception e) 
    {   
        tv.setText("Within Catch block");
     } 
  }
 }

This may be helps you.

Rajapandian