6

私のAndroidアプリデータベースでこのエラーが発生しています。

データベースでは、このコードを使用して、フォルダー内SQLiteのスクリプトからデータベースクエリを取得しています。assets

manager = context.getResources().getAssets();
            input = manager.open("createDb.xml");
            xpp.setInput(input, null);
            int type = xpp.getEventType();
            while(type != XmlPullParser.END_DOCUMENT) {
                if(type == XmlPullParser.START_DOCUMENT) {

                    Log.d(Tag, "In start document");
                }
                else if(type == XmlPullParser.START_TAG) {
                    Log.d(Tag, "In start tag = "+xpp.getName());
                }
                else if(type == XmlPullParser.END_TAG) {
                    Log.d(Tag, "In end tag = "+xpp.getName());

                }
                else if(type == XmlPullParser.TEXT) {
                    Log.d(Tag, "Have text = "+xpp.getText()); 
                    String strquery = xpp.getText();
                    db.execSQL(strquery);
                }
                type = xpp.next();
            }
        } 
        catch (XmlPullParserException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

そしてその正常に動作します。

しかし、私はSQLCipherデータベースで同じコードを実行しているため、このエラーが発生し、アプリケーションが常にクラッシュします。

私も必要なすべてのライブラリを追加しました。

Failure 0 (not an error) on 0x1a1ab0 when executing '
 FATAL EXCEPTION: main
 net.sqlcipher.database.SQLiteException: not an error: 
    at net.sqlcipher.database.SQLiteDatabase.native_execSQL(Native Method)
    at net.sqlcipher.database.SQLiteDatabase.execSQL(SQLiteDatabase.java:1834)
    at com.acs.android.fwk.database.ScriptExecutor.executeScripts(ScriptExecutor.java:86)
    at com.acs.android.fwk.database.DatabaseHelper.onCreate(DatabaseHelper.java:55)
    at net.sqlcipher.database.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:121)
    at com.acs.android.fwk.database.DatabaseAdapter.open(DatabaseAdapter.java:79)
    at com.acs.android.fwk.database.DatabaseAdapter.<init>(DatabaseAdapter.java:49)
    at com.acs.android.fwk.database.DatabaseAdapter.getInstance(DatabaseAdapter.java:37)
    at com.acs.nomad.ui.controller.DbDemoController.saveData(DbDemoController.java:27)
    at com.acs.nomad.ui.controller.DbDemoController_$1.onClick(DbDemoController_.java:39)
    at android.view.View.performClick(View.java:3511)
    at android.view.View$PerformClick.run(View.java:14105)
    at android.os.Handler.handleCallback(Handler.java:605)
    at android.os.Handler.dispatchMessage(Handler.java:92)
    at android.os.Looper.loop(Looper.java:137)
    at android.app.ActivityThread.main(ActivityThread.java:4424)
    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:784)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
    at dalvik.system.NativeStart.main(Native Method)

助けてください。

サンスク

4

2 に答える 2

5

SQLCipher for Androidが動作するために必要なためicudt46l.zip、ディレクトリ内にファイルが含まれていることを確認してください。assets

于 2013-03-25T13:14:16.070 に答える
-1

私は私の解決策を得ました:-

追加するだけです

else if(type == XmlPullParser.TEXT) {
    Log.d(Tag, "Have text = "+xpp.getText());
    if(xpp.isWhitespace())
    {

    }
    else
    {
    String strquery = xpp.getText();
    db.execSQL(strquery);
    }

}

その後、空白がないかどうかを確認ENDTAGしています。何もせずに次へ進みます。

于 2013-03-27T04:54:52.503 に答える