英語以外の言語で友達をSQLite androidにする方法



こんにちは親愛なる読者!

この記事では、キリル文字データをSQLiteに保存する問題に対処し、Android NDKを理解し、一般的に素晴らしい人生を送りたいと思います! ただし、今後は最初の2つのポイントを重要視します。 それらについてお話します。



よく知られているSQLiteの問題は、ラテン語以外の文字が好きではないということです。したがって、 これは行われます[1]

SELECT "" LIKE "";

0

SELECT "s" LIKE "S";

1








このような問題は緯度に関連しており、ユーザー定義の関数によって解決できます。

ただし、Androidは機能をサポートしていないため、松葉杖が作成されます。





Android NDK



読者の視野を広げ、適切な松葉杖を作成するには、 Android NDK [2]を使用することをお勧めします(ダウンロードして、アクセス可能なフォルダーに解凍します)



少し退屈


Android NDKは、C / C ++コードをAndroidプラットフォームのネイティブコードにコンパイルするためのツールです。 さらに、多くのAndroidライブラリが提供されているため、プログラムの特定の集中セクションをC / C ++で記述し、Javaで使用できます。

NDKはAndroid 1.5以降でサポートされており、次のARMv5TEプロセッサアーキテクチャ(Thumb-1命令を含む)、ARMv7-A(Thumb-2およびVFPv3-D16命令を含み、オプションでNEON / VFPv3-D32をサポート)

将来のリリースではx86サポートが約束されます



つまり、このツールを使用します!



だから...



私たちは何をしますか? ソースコードsqliteとicuを組み合わせます。

必要なライブラリとソースを検索するプロセスに負担をかけないために、コンパイル用に組み立てられたキットがここで提案されています[3] 。 何か余分なものが誤ってオンになった場合、私は謝罪します。

コンパイルプロセスに興味がない場合は、コンパイルされたライブラリをここからダウンロードでき[7] 、いくつかのポイントをスキップできます



ファイルをダウンロードした後、解凍し、プロジェクトにこれを配置します

プロジェクト/ jni

プロジェクトの今後の予定-プロジェクトが完了するまで完了させます



コンパイル手順に進む前に、いくつかのファイルの構造に注目してください。



common / Android.mk


将来のライブラリ、さまざまなフラグ、ビルドオプションに含まれるすべてのソースファイルについて説明します。



common / android_sqlite ...


これらのファイルは、Javaからデータベースと対話するためのインターフェースと同様に、データベースへのアンドロイドのようなアクセスを提供します。

関数のシグネチャに注意してください

 void Java_biz_sneg_sqlite_SQLiteDatabase_closedb()
      
      





ネイティブ関数を正常に使用するには、それらをJava____



の形式で記述する必要があります

個人的には見逃したため、地理距離関数(x1、y1、x2、y2)もオンにしました。

目的の機能を簡単に接続できるようになりました。sin、cos、またはexoticです。



ライブラリのコンパイルと接続



最初に、額の解決策が機能しないため、Windowsの手順を説明します。

一度やってください! Cygwin [6]をダウンロードしてインストールします。インストール中に、インストールするDevelパッケージを選択します。 そして...それは地獄のように長いので、一時的に眠りや他の楽しいもののために引退します。 ただし、間違ったサーバーを選択しただけかもしれません。

二回やる! Cygwinコンソール(他のOSのコンソールのみ)を起動し、プロジェクトディレクトリに移動します。

Windows:

$ cd /cygdrive/project/jni

Non-windows:

$ cd project/jni







3つやって! NDKを起動する

Windows:

$ /cygdrive/ndk-path/ndk-build

Non-windows:

$ ndk-path/ndk-build









projectはプロジェクトへのパス、ndk-pathはNDKを解凍したパスです

コンパイルプロセスが開始されます。

...

Compile++ thumb : android_sqlite <= tmutfmt.cpp

Compile++ thumb : android_sqlite <= colldata.cpp

Compile++ thumb : android_sqlite <= bmsearch.cpp

Compile++ thumb : android_sqlite <= bms.cpp

Compile++ thumb : android_sqlite <= currpinf.cpp

Compile++ thumb : android_sqlite <= uspoof.cpp

Compile++ thumb : android_sqlite <= uspoof_impl.cpp

...







起動しない場合は、O_oに同情します



出力では、パスproject / libs / armeabi / libandroid_sqlite.soに沿ってコンパイル済みライブラリを取得する必要があります



ここで、ライブラリをプロジェクトに接続する必要があります。

まず、メインアクティビティでその接続を記述する必要があります

 public class MainActivity extends TabActivity { static { System.loadLibrary("android_sqlite"); } ... }
      
      







次に、ネイティブライブラリで動作するコードが必要です。 ここからダウンロードできます[4]



仕事の仕方は?



どのように、どのように、座って行きました!

ベースを開きます

 try { dataBase_ = new biz.sneg.sqlite.SQLiteDatabase(DB_NAME); } catch (Exception e) { Log.wtf("Database", e); }
      
      







何らかの方法でデータを取得します

 try { biz.sneg.sqlite.SQLiteCursor cursor = dataBase_.query("SELECT * FROM tablename WHERE rus_text_field LIKE ?", new Object[]{"%"}); List<Map<String, String>> results = new ArrayList<Map<String,String>>(); while (cursor.next()) { final int columnCount = cursor.count(); HashMap<String, String> currentMap; currentMap = new HashMap<String, String>(); for (int i = 0; i < columnCount; i++) { currentMap.put(cursor.columnName(i), cursor.stringValue(i)); } results.add(currentMap); } cursor.dispose(); } catch (Exception e) { Log.wtf("Database", e); }
      
      







一般的に、私はあなたに幸運を祈ります!



アイデアとアセンブリの作成者、ニコライ・クダショフ、招待状はここに送信できますdrklo.2kb <famous_symbol> gmail.com



参照:

1. SQLiteおよび完全なUNICODE

2. Android NDK

3. ライブラリのソース

4. Javaのソース

5. SQLite

6. Cygwin

7. コンパイルされたライブラリ



All Articles