java - 为什么以及在哪里调用 setLocale

标签 java android sqlite locale

我需要为我的应用程序创建一个 SQLite 数据库。我需要用几种欧洲语言存储文本,因此会有大量重音字符和其他奇怪的标记。我正在扩展 SQLiteOpenHelper

检查 .db 文件时,我注意到有一个名为 android_metadata 的额外表。有一个名为 locale 的列,在我的模拟器中默认设置为“en_US”。

我已经阅读了开发人员指南中的 SQLite 部分,以及 SQLiteOpenHelperSQLiteDatabase 的 javadoc,在 SO 和 Google 中搜索,但无处可寻将区域设置设置为数据库的正确位置是什么,或者是否确实需要。猜测它应该在数据库创建时完成,我尝试在助手的 onCreate 方法中调用 db.setLocale,但我得到了这个异常:

BEGIN TRANSACTION failed setting locale
FATAL EXCEPTION: Thread-9
android.database.sqlite.SQLiteException: cannot start a transaction within a transaction
at android.database.sqlite.SQLiteDatabase.native_setLocale(Native Method)
at android.database.sqlite.SQLiteDatabase.setLocale(SQLiteDatabase.java:1950)

我的方法是这样的:

public class MyOpenHelper extends SQLiteOpenHelper {

    @Override
    public void onCreate(SQLiteDatabase db) {   
        db.setLocale(new Locale("en","EN"));
        ...
    }

    ...
}

这是我的问题:

  1. 我真的需要为数据库设置语言环境吗?我真的不需要开箱即用地对查询进行排序,因为我以后总是可以自己对结果进行排序。
  2. 我应该在哪里调用 setLocale

最佳答案

  1. 仅当您打算使用 LOCALIZED 归类算法时才需要设置区域设置,这取决于系统区域设置,
  2. 如您的回答所述,在 onConfigure() 上调用 setLocale() .

关于java - 为什么以及在哪里调用 setLocale,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13720092/

相关文章:

android - 将布局中textview中的文本动态设置为header Layout

java - Android SQLite 数据检索器

android - 编译时无法打开数据库文件(代码 14): ,:PRAGMA journal_mode

java - 如何识别哪个菜单项被禁用?

java - 图像特征提取

java - Java语言的Android EMI计算器: Not resulting correct as Math. pow给出了非常大的数字

python - 更改子类模型表中的列顺序

java - 如何收集必须像字符串一样格式化的数字?

Java - 合并排序未正确选择枢轴

安卓 : How to invoke media player