当用户第一次打开应用程序时,我想在数据库中插入一些值。
问题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
,因此我尝试使用上面的类。
怎么做?
答案 0 :(得分:0)
我从未使用过GreenDAO,所以我不能对此发表评论。
如何插入字符串资源的名称?例如,插入“food_key”,其中food_key
是strings.xml
文件中字符串的名称。它们看起来像这样
/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);
}
这样做的好处是可以用手机当前使用的任何语言向用户显示文本。
getStringResourceByName()
在运行时获取英语或Pt转换,而不是直接向用户显示存储在数据库中的值。这样,当用户更改其设备语言时,您根本不需要更新数据库。 我将使用值(在我的情况下为Category类型)。正如你在上面的代码中看到的那样,Categoty只有更多的列而不是'name'。
如果英语和葡萄牙语的类别相同,则可以将显示值直接存储在数据库中。如果它们因语言而异,那么您需要通过为这些语言提供特定于语言的资源来做类似的事情。