Android openOrCreateDatabase无法将db的语言环境更改为en_US

时间:2015-01-08 00:49:51

标签: android database sqlite android-5.0-lollipop

我使用openOrCreateDatabase在Android中打开SQLite数据库。该方法在带有KitKat(以及其他几种平板电脑)的Nexus 10上运行良好,但在带有Lollipop的Nexus 9上出现错误"未能将db xyz的语言环境更改为en_US"。只有当我尝试在像Downloads这样的公共目录中打开数据库时才会发生这种情况。如果我使用私有context.getDatabasePath位置打开,它适用于Nexus 9.在所有其他平板电脑上,这两个位置都有效。我尝试在公共场所打开的原因是能够使用DDMS文件资源管理器检查数据库。有没有办法在Nexus 9的公共位置创建数据库? 感谢。

1 个答案:

答案 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();
            }
        }
    }
}