2016-05-08 6 views
0

Когда пользователь впервые открывает приложение, я хотел бы вставить в базу данных некоторые значения.Как вставить/обновить базу данных в соответствии с языком устройства

Вопрос 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: Как обновить только значения, которые все еще вставлены?

Есть идеи? Благодарю.

Редактировать: У меня будет сотни значений (в моем случае Тип категории). Как вы можете видеть в коде выше, категория содержит больше столбцов, чем только имя.

Я хотел бы указать правильную категорию в соответствии с языком устройства при первом запуске.

Я бы хотел обновить эти категории, если пользователь изменит язык устройства в системе.

Я не вижу, как использовать res, из-за этого я попытался использовать этот класс выше.

Как это сделать?

+0

Почему вы не вставляете язык по умолчанию (английский или все, что хотите), а затем меняйте язык с системным языком, если хотите показать? –

ответ

0
  1. Я никогда не использовал GreenDAO, поэтому я не могу комментировать это.

  2. Как насчет вставки имени ресурса строки? Например, вставка «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); 
    } 

Это дает возможность отображать текст пользователю на любом языке, на котором в данный момент используется их телефон.

  1. Я предлагаю, чтобы данные, которые вы вставляете в свою базу данных, не являются английскими значениями отображения или португальскими значениями отображения. Вместо этого вы вставляете имя ресурса. Затем вместо отображения значений, хранящихся в базе данных, непосредственно пользователю, вы используете getStringResourceByName(), чтобы получить перевод на английский или Pt во время выполнения. Таким образом, вам не нужно обновлять свою базу данных вообще, когда пользователь меняет язык своего устройства.

Я буду иметь handreds значений (в моем случае типа Категория). Как вы можете видеть в коде выше, у Categoty больше столбцов вместо «name».

Если категории одинаковы на английском и португальском языках, вы можете хранить отображаемые значения непосредственно в базе данных. Если они различаются в зависимости от языка, тогда вам нужно будет сделать что-то подобное, предоставив ресурсы для конкретных языков.

+0

Я обновил свой ответ. Я не уверен, что вы подразумеваете под «Я не вижу, как использовать res, из-за этого я попытался использовать этот класс выше». Вы пробовали, что я предложил? – Michiyo

+0

Думаю, что я использую устройство на английском языке, когда я запускаю приложение, категории будут вставлены в базу данных как английские версии. Итак, я меняю язык на португальский, теперь я хочу обновить эти значения до португальского. Эти значения можно редактировать или удалять. Я хочу изменить только оригинальные категории. Если пользователь отредактирует или удалит любую категорию, я ничего не хочу делать. Теперь понимаю? –

+0

Хорошо, да, тогда я понимаю, что вы говорите. Я не могу помочь вам в этом, потому что я не думаю, что это очень практично. Я предлагаю альтернативный подход. Я не могу сказать из ваших ответов, не понимаете ли вы то, что я предлагал, или вас интересует только ваша проблема, используя метод, описанный в вашем исходном вопросе. – Michiyo