2016-05-08 36 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:如何僅更新仍然插入的值?

任何想法?謝謝。

編輯: 我將有數百個值(在我的情況下類別類型)。 正如你在上面的代碼中看到的那樣,Category有更多的列,而不僅僅是'name'。

我想在首次啓動時根據設備的語言插入正確的類別。

如果用戶在系統上更改設備的語言,我想更新這些類別。

我不明白如何使用res,因爲這個我試過使用這個上面的類。

如何做到這一點?

+0

爲什麼不插入默認語言(英語或任何你想要的),然後改變語言與系統區域設置,當你想顯示? –

回答

0
  1. 我從來沒有使用過GreenDAO,所以我不能評論這一點。

  2. 如何插入字符串資源的名稱?例如,插入「food_key」,其中food_keystrings.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

我已經更新了我的答案。我不確定你的意思是「我沒有看到如何使用水庫,因爲我嘗試使用這個上面的課程」。 你有沒有試過我建議的? – Michiyo

+0

認爲我正在使用英文設備,當我啓動應用程序時,類別將作爲英語vaues插入到數據庫中。因此,我將語言更改爲葡萄牙語,現在我想將這些值更新爲葡萄牙語。這些值可以被編輯或刪除。我只想更改原件類別。如果用戶編輯或刪除任何類別,我不想做任何事情。現在明白了? –

+0

好的,是的,那我明白你在說什麼。我無法幫助你,因爲我不認爲這很實際。我建議一種替代方法。我無法從您的回答中瞭解到您是否不明白我提出的建議,或者您是否只想用您在原始問題中描述的方法解決您的問題。 – Michiyo