我想将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? 谢谢!
答案 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。