android - Run Time Error: FATAL EXCEPTION: main java.lang.ExceptionInInitializerError -
hi new android app development , trying implement simple ocr app found here: https://github.com/gautamgupta/simple-android-ocr using android studio, found errors had permission fixed getting error:
03-31 20:07:55.010 822-822/com.example.zakaria.myapp e/androidruntime﹕ fatal exception: main java.lang.exceptionininitializererror @ engenoid.tessocrtest.mainactivity.onphototaken(mainactivity.java:210) @ engenoid.tessocrtest.mainactivity.onactivityresult(mainactivity.java:134) @ android.app.activity.dispatchactivityresult(activity.java:5515) @ android.app.activitythread.deliverresults(activitythread.java:3429) @ android.app.activitythread.handlesendresult(activitythread.java:3476) @ android.app.activitythread.access$1200(activitythread.java:157) @ android.app.activitythread$h.handlemessage(activitythread.java:1337) @ android.os.handler.dispatchmessage(handler.java:99) @ android.os.looper.loop(looper.java:176) @ android.app.activitythread.main(activitythread.java:5317) @ java.lang.reflect.method.invokenative(native method) @ java.lang.reflect.method.invoke(method.java:511) @ com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:1102) @ com.android.internal.os.zygoteinit.main(zygoteinit.java:869) @ dalvik.system.nativestart.main(native method) caused by: java.lang.unsatisfiedlinkerror: couldn't load lept loader dalvik.system.pathclassloader[dexpath=/data/app/com.example.zakaria.myapp-10.apk,librarypath=/data/app-lib/com.example.zakaria.myapp-10]: findlibrary returned null @ java.lang.runtime.loadlibrary(runtime.java:365) @ java.lang.system.loadlibrary(system.java:535) @ com.googlecode.tesseract.android.tessbaseapi.<clinit>(tessbaseapi.java:44) at engenoid.tessocrtest.mainactivity.onphototaken(mainactivity.java:210) at engenoid.tessocrtest.mainactivity.onactivityresult(mainactivity.java:134) at android.app.activity.dispatchactivityresult(activity.java:5515) at android.app.activitythread.deliverresults(activitythread.java:3429) at android.app.activitythread.handlesendresult(activitythread.java:3476) at android.app.activitythread.access$1200(activitythread.java:157) at android.app.activitythread$h.handlemessage(activitythread.java:1337) at android.os.handler.dispatchmessage(handler.java:99) at android.os.looper.loop(looper.java:176) at android.app.activitythread.main(activitythread.java:5317) at java.lang.reflect.method.invokenative(native method) at java.lang.reflect.method.invoke(method.java:511) at com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:1102) at com.android.internal.os.zygoteinit.main(zygoteinit.java:869) at dalvik.system.nativestart.main(native method) here main activity:
package engenoid.tessocrtest; import android.app.activity; import android.content.intent; import android.content.res.assetmanager; import android.graphics.bitmap; import android.graphics.bitmapfactory; import android.graphics.matrix; import android.media.exifinterface; import android.net.uri; import android.os.bundle; import android.os.environment; import android.provider.mediastore; import android.util.log; import android.view.view; import android.widget.button; import android.widget.edittext; import com.example.zakaria.myapp.r; import com.googlecode.tesseract.android.tessbaseapi; import java.io.file; import java.io.fileoutputstream; import java.io.ioexception; import java.io.inputstream; import java.io.outputstream; public class mainactivity extends activity { public static final string package_name = "com.datumdroid.android.ocr.simple"; public static final string data_path = environment .getexternalstoragedirectory().tostring() + "/simpleandroidocr/"; // should have trained data file in assets folder // can them at: // http://code.google.com/p/tesseract-ocr/downloads/list public static final string lang = "eng"; private static final string tag = "simpleandroidocr.java"; protected button _button; // protected imageview _image; protected edittext _field; protected string _path; protected boolean _taken; protected static final string photo_taken = "photo_taken"; @override public void oncreate(bundle savedinstancestate) { string[] paths = new string[] { data_path, data_path + "tessdata/" }; (string path : paths) { file dir = new file(path); if (!dir.exists()) { if (!dir.mkdirs()) { log.v(tag, "error: creation of directory " + path + " on sdcard failed"); return; } else { log.v(tag, "created directory " + path + " on sdcard"); } } } // lang.traineddata file app (in assets folder) // can them at: // http://code.google.com/p/tesseract-ocr/downloads/list // area needs work , optimization if (!(new file(data_path + "tessdata/" + lang + ".traineddata")).exists()) { try { assetmanager assetmanager = getassets(); inputstream in = assetmanager.open("tessdata/" + lang + ".traineddata"); //gzipinputstream gin = new gzipinputstream(in); outputstream out = new fileoutputstream(data_path + "tessdata/" + lang + ".traineddata"); // transfer bytes in out byte[] buf = new byte[1024]; int len; //while ((lenf = gin.read(buff)) > 0) { while ((len = in.read(buf)) > 0) { out.write(buf, 0, len); } in.close(); //gin.close(); out.close(); log.v(tag, "copied " + lang + " traineddata"); } catch (ioexception e) { log.e(tag, "was unable copy " + lang + " traineddata " + e.tostring()); } } super.oncreate(savedinstancestate); setcontentview(r.layout.main); // _image = (imageview) findviewbyid(r.id.image); _field = (edittext) findviewbyid(r.id.field); _button = (button) findviewbyid(r.id.button); _button.setonclicklistener(new buttonclickhandler()); _path = data_path + "/ocr.jpg"; } public class buttonclickhandler implements view.onclicklistener { public void onclick(view view) { log.v(tag, "starting camera app"); startcameraactivity(); } } // simple android photo capture: // http://labs.makemachine.net/2010/03/simple-android-photo-capture/ protected void startcameraactivity() { file file = new file(_path); uri outputfileuri = uri.fromfile(file); final intent intent = new intent(mediastore.action_image_capture); intent.putextra(mediastore.extra_output, outputfileuri); startactivityforresult(intent, 0); } @override protected void onactivityresult(int requestcode, int resultcode, intent data) { log.i(tag, "resultcode: " + resultcode); if (resultcode == -1) { onphototaken(); } else { log.v(tag, "user cancelled"); } } @override protected void onsaveinstancestate(bundle outstate) { outstate.putboolean(mainactivity.photo_taken, _taken); } @override protected void onrestoreinstancestate(bundle savedinstancestate) { log.i(tag, "onrestoreinstancestate()"); if (savedinstancestate.getboolean(mainactivity.photo_taken)) { onphototaken(); } } protected void onphototaken() { _taken = true; bitmapfactory.options options = new bitmapfactory.options(); options.insamplesize = 4; bitmap bitmap = bitmapfactory.decodefile(_path, options); try { exifinterface exif = new exifinterface(_path); int exiforientation = exif.getattributeint( exifinterface.tag_orientation, exifinterface.orientation_normal); log.v(tag, "orient: " + exiforientation); int rotate = 0; switch (exiforientation) { case exifinterface.orientation_rotate_90: rotate = 90; break; case exifinterface.orientation_rotate_180: rotate = 180; break; case exifinterface.orientation_rotate_270: rotate = 270; break; } log.v(tag, "rotation: " + rotate); if (rotate != 0) { // getting width & height of given image. int w = bitmap.getwidth(); int h = bitmap.getheight(); // setting pre rotate matrix mtx = new matrix(); mtx.prerotate(rotate); // rotating bitmap bitmap = bitmap.createbitmap(bitmap, 0, 0, w, h, mtx, false); } // convert argb_8888, required tess bitmap = bitmap.copy(bitmap.config.argb_8888, true); } catch (ioexception e) { log.e(tag, "couldn't correct orientation: " + e.tostring()); } // _image.setimagebitmap( bitmap ); log.v(tag, "before baseapi"); tessbaseapi baseapi = new tessbaseapi(); baseapi.setdebug(true); baseapi.init(data_path, lang); baseapi.setimage(bitmap); string recognizedtext = baseapi.getutf8text(); baseapi.end(); // have text in recognizedtext var, can it. // display stripped out trimmed alpha-numeric version of (if lang eng) // garbage doesn't make display. log.v(tag, "ocred text: " + recognizedtext); if ( lang.equalsignorecase("eng") ) { recognizedtext = recognizedtext.replaceall("[^a-za-z0-9]+", " "); } recognizedtext = recognizedtext.trim(); if ( recognizedtext.length() != 0 ) { _field.settext(_field.gettext().tostring().length() == 0 ? recognizedtext : _field.gettext() + " " + recognizedtext); _field.setselection(_field.gettext().tostring().length()); } } } and manifest
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.zakaria.myapp" > <uses-permission android:name="android.permission.camera"/> <uses-permission android:name="android.permission.write_external_storage" /> <uses-permission android:name="android.permission.read_external_storage" /> <uses-feature android:name="android.hardware.camera.autofocus" /> <uses-feature android:name="android.hardware.camera.flash" android:required="false" /> <uses-feature android:name="android.hardware.camera" /> <application android:allowbackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:theme="@style/apptheme"> <activity android:name="engenoid.tessocrtest.mainactivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.main" /> <category android:name="android.intent.category.launcher" /> </intent-filter> </activity> </application> </manifest> so if need post thing else please tell me , in advance!
@gabesechan right went through app files , there supposed file name, doing further google search learnt that file supposed generated when building tess-two library used in app, think didn't right. thank much.
Comments
Post a Comment