package Ġcom . example . el one . my application Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . support . v 7 . app . AppCompatActivity Ċ import Ġandroid . support . v 7 . widget . Linear LayoutManager Ċ import Ġandroid . support . v 7 . widget . RecyclerView Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . Menu Ċ import Ġandroid . view . MenuItem Ċ import Ġandroid . widget . Button Ċ import Ġandroid . widget . EditText Ċ import Ġcom . example . el one . my application . model . Question Ċ import Ġkotlinx . android . synt hetic . main . activity _ main .* Ċ import Ġorg . jetbrains . ank o . db . class Parser Ċ import Ġorg . jetbrains . ank o . db . parse List Ċ import Ġorg . jetbrains . ank o . db . select Ċ import Ġjava . io .* Ċ Ċ class ĠMainActivity Ġ: ĠAppCompatActivity () Ġ{ ĊĠĠĠ Ġprivate Ġval ĠTAG : ĠString Ġ= Ġ" TI KU " ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġ Ġm ListView : ĠRecyclerView ĊĠĠĠ Ġprivate Ġlateinit Ġvar ĠT ESS BASEPATH : ĠString ĊĠĠĠ Ġprivate Ġval ĠCH INE SEL ANGUAGE : String Ġ= Ġ" chi _ sim " ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ main ) ĊĠĠĠĠĠĠĠ Ġtoolbar . title Ġ= Ġ Ġ" Y EE è¾ ħ åĬ© " ĊĠĠĠĠĠĠĠ Ġval Ġbtn Show Ġ= ĠfindViewById < Button >( R . id . btn Show ) ĊĠĠĠĠĠĠĠ Ġbtn Show ?. setOnClickListener Ġ{ Ġsearch Question () Ġ} ĊĊĠĠĠĠĠĠĠ Ġimport Database () Ċ // ĠĠĠĠĠĠĠ Ġinit O cr () ĊĠĠĠĠĠĠĠ Ġm ListView Ġ= ĠfindViewById ( R . id . question _ recycler _ view ) ĊĠĠĠĠĠĠĠ Ġm ListView . layout Manager Ġ= ĠLinearLayoutManager ( this ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġsearch Question () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġedit Text Ġ= ĠfindViewById < EditText >( R . id . search Text ) ĊĠĠĠĠĠĠĠ Ġval Ġrows Ġ= Ġdatabase . use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselect (" question ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. where Simple ("( subject Ġlike Ġ'% "+ edit Text . text +" % ') Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. exec Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparse List ( class Parser < Question >()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġm ListView . adapter Ġ= ĠMain Adapter ( rows ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠInf late Ġthe Ġmenu ; Ġthis Ġadds Ġitems Ġto Ġthe Ġaction Ġbar Ġif Ġit Ġis Ġpresent . ĊĠĠĠĠĠĠĠ Ġmenu Inflater . inflate ( R . menu . menu _ main , Ġmenu ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠHandle Ġaction Ġbar Ġitem Ġclicks Ġhere . ĠThe Ġaction Ġbar Ġwill ĊĠĠĠĠĠĠĠ Ġ// Ġautomatically Ġhandle Ġclicks Ġon Ġthe ĠHome / Up Ġbutton , Ġso Ġlong ĊĠĠĠĠĠĠĠ Ġ// Ġas Ġyou Ġspecify Ġa Ġparent Ġactivity Ġin ĠAndroid Manifest . xml . ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( item . itemId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . action _ settings Ġ-> Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġsuper . on Options ItemSelected ( item ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġimport Database () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġ åŃĺ æĶ¾ æķ°æį®åºĵ çļĦ çĽ®å½ķ ĊĠĠĠĠĠĠĠ Ġvar Ġdir Path Ġ= Ġ"/ data / data / com . example . el one . my application / databases " ĊĠĠĠĠĠĠĠ Ġvar Ġdir Ġ= ĠFile ( dir Path ) ĊĠĠĠĠĠĠĠ Ġif Ġ(! dir . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdir . mkdir () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// Ġ æķ°æį®åºĵ æĸĩä»¶ ĊĠĠĠĠĠĠĠ Ġvar Ġfile Ġ= ĠFile ( dir , Ġ" y ee . db ") ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! file . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfile . createNew File () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ åĬłè½½ éľĢè¦ģ å¯¼åħ¥ çļĦ æķ°æį®åºĵ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġinst ream : ĠInputStream Ġ= Ġthis . application Context . resources . open Raw Resource ( R . raw . y ee ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġf os Ġ= ĠFileOutputStream ( file ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġbuffer Ġ Ġ= ĠByteArray ( in stream . available ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinst ream . read ( buffer ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġf os . write ( buffer ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinst ream . close () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġf os . close () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( Ġe : ĠFileNotFoundException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ä»£çłģ æĿ¥ æºĲ ï¼ļ https :// blog . cs dn . net / a ik ong m eng / article / details / 7 3 3 2 3 2 7 2 ĊĠĠĠ Ġprivate Ġfun Ġinit O cr () Ġ{ ĊĠĠĠĠĠĠĠ ĠT ESS BASEPATH Ġ= Ġfiles Dir . toString () Ġ+ Ġ"/ t esseract /" ĊĠĠĠĠĠĠĠ Ġcheck File ( File ( T ESS BASEPATH Ġ+ Ġ" t ess data / "), ĠCH INE SEL ANGUAGE ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ param Ġdir ĊĠĠĠĠ Ġ* Ġ@ param Ġlanguage Ġchi _ sim Ġeng ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġcheck File ( dir : ĠFile , Ġlanguage : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// å¦Ĥæŀľ çĽ®åīį ä¸įåŃĺåľ¨ åĪĻ åĪĽå»º æĸ¹ éĿ¢ ï¼Į çĦ¶åĲİ åľ¨ åĪ¤æĸŃ è®Ńç»ĥ æķ°æį® æĸĩä»¶ æĺ¯åĲ¦ åŃĺåľ¨ ĊĠĠĠĠĠĠĠ Ġif Ġ(! dir . exists () Ġ&& Ġdir . mkdir s ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcopy Files ( language ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( dir . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdata FilePath Ġ= ĠT ESS BASEPATH Ġ+ Ġ" t ess data /" Ġ+ Ġlanguage Ġ+ Ġ". trained data " ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdata file Ġ= ĠFile ( data FilePath ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! data file . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcopy Files ( language ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠæĬ Ĭ è®Ńç»ĥ æķ°æį® æĶ¾ åĪ° æīĭæľº åĨħåŃĺ ĊĠĠĠĠ Ġ* Ġ@ param Ġlanguage Ġ" chi _ sim " Ġ," eng " ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġcopy Files ( language : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfilepath Ġ= ĠT ESS BASEPATH Ġ+ Ġ" t ess data /" Ġ+ Ġlanguage Ġ+ Ġ". trained data " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinst ream Ġ= Ġassets . open (" t ess data /$ language . trained data ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġout stream Ġ= ĠFileOutputStream ( filepath ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuffer Ġ= ĠByteArray ( 1 0 2 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġread : ĠInt Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( Ġ{ Ġread Ġ= Ġinst ream . read ( buffer ); Ġread Ġ} () Ġ!= Ġ- 1 Ġ Ġ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġout stream . write ( buffer , Ġ 0 , Ġread ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġout stream . flush () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġout stream . close () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinst ream . close () ĊĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠFileNotFoundException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} Ċ } ĊĊ