Ошибка компиляции на Zxing - PullRequest
0 голосов
/ 09 февраля 2009

Поскольку у меня нет G1 для целей разработки, я прилагаю все усилия с эмулятором. При этом я пытаюсь отсканировать изображение JPEG или изображение PNG на своей SD-карте с помощью библиотеки ZXing (Zebra Zrossing).

Я попытался изменить код в проекте Android, чтобы он сканировал изображение с SD-карты, а не с камеры, без какой-либо удачи.

То, что я сделал дальше, возможно, является корнем моей проблемы.

Я пытался использовать код JAVASE в новом проекте Android для предоставления изображения «модифицированному» CommandLineRunner, и вот что:

Eclipse создаст проект, но не запустит его. В журнале виртуальных машин меня это сообщение вызывает среди прочих:

** 02-08 20: 47: 45.916: WARN / dalvikvm (619): VFY: невозможно разрешить статический метод 939: Ljavax / imageio / ImageIO; .read (Ljava / io / File;) Ljava / awt / изображение / BufferedImage; 02-08 20: 47: 45.926: WARN / dalvikvm (619): VFY: отклонение кода операции 0x71 в 0x0004 02-08 20: 47: 45.926: WARN / dalvikvm (619): VFY: отклонено Lcom / magoco / fread / FRead; .decode2 (Ljava / io / File; Ljava / util / Hashtable; Ljava / lang / String;) Ljava / языки / String; 02-08 20: 47: 45.926: WARN / dalvikvm (619): верификатор отклонен, класс Lcom / magoco / fread / FRead; 02-08 20: 47: 45.926: WARN / dalvikvm (619): сбой инициализации класса при вызове newInstance (Lcom / magoco / fread / FRead;) 02-08 20: 47: 45.926: DEBUG / AndroidRuntime (619): выключение виртуальной машины 02-08 20: 47: 45.926: WARN / dalvikvm (619): threadid = 3: выход из потока с необработанным исключением (группа = 0x40010e28) 02-08 20: 47: 45.937: ОШИБКА / AndroidRuntime (619): обработчик Uncaught: выход из основного потока из-за необработанного исключения 02-08 20: 47: 45.946: ОШИБКА / AndroidRuntime (619): java.lang.VerifyError: com.magoco.fread.FRead **

Я искал в Интернете ответ, и мне кто-то сказал, что это распространенная ошибка в Dalvikvm из-за того, что может быть класс или библиотека, которые были предварительно скомпилированы (правда, вне Eclipse), и виртуальная машина не будет ' не сможет его использовать.

Я публикую свой код в основной деятельности:

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;
}

}

Заранее спасибо

monn3t

Ответы [ 2 ]

1 голос
/ 17 августа 2009

Hai, Я попытался извлечь данные из штрих-кодов, и я следовал этим шагам.

1. Загрузите ZXing 1.3 и распакуйте его.

2.Добавьте core / src и androidtest / src из извлеченного zxing floder в приложение android, установив свойство используйте эту ссылку для установки свойства, http://groups.google.com/group/zxing/browse_thread/thread/7d8693e6e42408f2

Теперь включите следующий код,

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");
     } 
  }
 }

Это может вам помочь.

0 голосов
/ 09 февраля 2009

Это Шон из рассматриваемого проекта.

Вы пытаетесь использовать код, предназначенный для Java SE в Android. Некоторые из библиотек в Java SE отсутствуют в Android, например ImageIO.

Посмотрите на код в Android /, который использует специфичные для Android классы для загрузки изображений.

...