我使用openOrCreateDatabase在Android中打开SQLite数据库。该方法在带有KitKat(以及其他几种平板电脑)的Nexus 10上运行良好,但在带有Lollipop的Nexus 9上出现错误"未能将db xyz的语言环境更改为en_US"。只有当我尝试在像Downloads这样的公共目录中打开数据库时才会发生这种情况。如果我使用私有context.getDatabasePath位置打开,它适用于Nexus 9.在所有其他平板电脑上,这两个位置都有效。我尝试在公共场所打开的原因是能够使用DDMS文件资源管理器检查数据库。有没有办法在Nexus 9的公共位置创建数据库? 感谢。
答案 0 :(得分:0)
使用此课程。这将从您想要的任何位置打开您的数据库。
import java.util.concurrent.atomic.AtomicInteger;
import android.database.sqlite.SQLiteDatabase;
import android.os.Environment;
public class DataBaseHandler {
private SQLiteDatabase mDatabase;
private static DataBaseHandler sDataBaseHandler;
public static String datapath = Environment.getExternalStorageDirectory().getPath() + "Your DataBase path";
private AtomicInteger mOpenCounter = new AtomicInteger();
public static synchronized DataBaseHandler getInstance() {
if (sDataBaseHandler == null) {
sDataBaseHandler = new DataBaseHandler();
}
return sDataBaseHandler;
}
public synchronized SQLiteDatabase openDatabase() {
if (mOpenCounter.incrementAndGet() == 1) {
// Opening new database
if (mDatabase == null) {
mDatabase = SQLiteDatabase.openDatabase(datapath, null, SQLiteDatabase.OPEN_READWRITE | SQLiteDatabase.NO_LOCALIZED_COLLATORS);
} else if (!mDatabase.isOpen()) {
mDatabase = SQLiteDatabase.openDatabase(datapath, null, SQLiteDatabase.OPEN_READWRITE | SQLiteDatabase.NO_LOCALIZED_COLLATORS);
}
}
return mDatabase;
}
public synchronized void closeDatabase() {
if (mOpenCounter.decrementAndGet() == 0) {
if (mDatabase != null) {
mDatabase.close();
}
}
}
}