如何根据设备的语言插入/更新数据库

时间:2016-05-08 18:02:31

标签: android android-database

当用户第一次打开应用程序时,我想在数据库中插入一些值。

问题1:首次插入数据库的最佳方式是什么?

到现在为止我正在使用GreenDAO。我还应该继续使用它还是改变它?

我还想根据设备的语言插入值。如果用户使用英语,则必须插入英语值。如果用户使用葡萄牙语,则必须插入葡萄牙语值。我们走了。 但如果用户在Android设置上更改语言,我也想更新此值。

问题2:更改设备语言后如何更新数据库?

用户可能会删除这些值,因此我只想更新仍然插入的值。

我要插入的初始课程:

public class CategoryList {

    private final String mLanguage;

    public CategoryList(String language) {
        mLanguage = language;
    }

    public List<Category> get() {
        final List<Category> list = new ArrayList<>();

        switch (mLanguage) {
            case "pt":
                list.add(new Category(1L, "Passeio", -13388315));
                list.add(new Category(2L, "Comida", -48060));
                break;
            default: // en
                list.add(new Category(1L, "Walk", -13388315));
                list.add(new Category(2L, "Food", -48060));
                break;
        }

        return list;
    }
}

我不知道我将如何更新仍然插入的值。

问题3:如何仅更新仍插入的值?

有什么想法吗?感谢。

修改 我将拥有数百个值(在我的情况下为Category类型)。 正如您在上面的代码中看到的那样,Category只有更多列而不仅仅是'name'。

我想在第一次开始时根据设备的语言插入正确的类别。

如果用户在系统上更改设备的语言,我想更新这些类别。

我没有看到如何使用res,因此我尝试使用上面的类。

怎么做?

1 个答案:

答案 0 :(得分:0)

  1. 我从未使用过GreenDAO,所以我不能对此发表评论。

  2. 如何插入字符串资源的名称?例如,插入“food_key”,其中food_keystrings.xml文件中字符串的名称。它们看起来像这样

  3. /res/values/strings.xml

    <resources>
        <string name="food_key">Food</string>
        <string name="walk_key">Walk</string>
    </resources>
    

    /res/values-pt/strings.xml

    <resources>
        <string name="walk_key">Passeio</string>>
        <string name="food_key">Comida</string>
    </resources>
    

    然后,在从数据库查询中获取类似“食物”的内容之后,您可以使用this method之类的内容获取实际字符串以供显示:

      private String getStringResourceByName(String aString) {
        String packageName = getPackageName();
        int resId = getResources().getIdentifier(aString, "string", packageName);
        return getString(resId);
      }
    

    这样做的好处是可以用手机当前使用的任何语言向用户显示文本。

    1. 我建议您插入数据库的数据不是英文显示值或葡萄牙显示值。而是插入资源的名称。然后,您可以使用getStringResourceByName()在运行时获取英语或Pt转换,而不是直接向用户显示存储在数据库中的值。这样,当用户更改其设备语言时,您根本不需要更新数据库。
    2.   

      我将使用值(在我的情况下为Category类型)。正如你在上面的代码中看到的那样,Categoty只有更多的列而不是'name'。

      如果英语和葡萄牙语的类别相同,则可以将显示值直接存储在数据库中。如果它们因语言而异,那么您需要通过为这些语言提供特定于语言的资源来做类似的事情。