将Ormlite与SQLCipher Android结合使用

时间:2014-07-13 05:56:03

标签: java android ormlite sqlcipher

我想将ORMLite与SLQCipher一起使用。我在这个链接中遵循ge0rg的指示: How can I use ORMLite with SQLCipher together in Android? 但在第4步,我不知道如何添加密码,因为在这里的源: https://github.com/d-tarasov/ormlite-android-sqlcipher/blob/master/src/main/java/com/j256/ormlite/sqlcipher/android/apptools/OrmLiteSqliteOpenHelper.java 有一些配置文件的构造函数。我真的不知道如何使用它们。我的应用程序在SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:99)中抛出NullPointerException 任何人都可以帮我解决这个问题。我在哪里可以输入密码以及为什么我得到了NullPointerException? 谢谢!

1 个答案:

答案 0 :(得分:0)

如果您查看父OrmLiteSqliteOpenHelper class constructor的文档:

public OrmLiteSqliteOpenHelper(android.content.Context context,
                               String databaseName,
                               android.database.sqlite.SQLiteDatabase.CursorFactory factory,
                               int databaseVersion,
                               int configFileId)
Same as the other constructor with the addition of a file-id of the table config-file. 
See OrmLiteConfigUtil for details.    

Parameters:
configFileId - file-id which probably should be a R.raw.ormlite_config.txt or some 
               static value. 

它会引导您查看OrmLiteConfigUtil for details。总而言之 - 在Ice Cream Sandwich(Google API 15)之前,Android中对注释方法的调用非常非常昂贵,这导致人们在配置10-15个DAO时看到2-3秒的启动时间。因此,他们添加了一个实用程序类,用于转换注释并编写配置文件。然后可以将此文件加载到DaoManager中,而无需对注释进行任何运行时调用。

因此,根据您的minSDK版本,如果它是冰淇淋三明治(Google API 15)或更高版本,那么您可以继续使用注释。 Looking at the source,你只需为configFile传递null:

public class MyDatabaseHelper extends OrmLiteSqliteOpenHelper {
    public static final String DATABASE_NAME = "Example.db";
    public static final int DATABASE_VERSION = 1;
    public static final String DATABASE_PASSWORD = "Password";

    public MyDatabaseHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION, (InputStream)null, DATABASE_PASSWORD);
    }
}

注意:为了避免模糊的构造函数问题,请确保转换为null。

如果您的minSDKVersion低于Google API 15(例如Honeycomb),那么您应该为您的类创建配置文件。

OrmLiteConfigUtil.writeConfigFile("ormlite_config.txt"); 

然后你将R.raw.ormlite_config.txt传递给上面的构造函数而不是null。