2017-11-27 17 views
0

私はObjectBoxライブラリを使ってAndroidでデータベースを管理しています。データベースにあらかじめ定義された値を設定する方法

アプリケーションを初めてインストールまたは起動したときにのみ初期化されるデータベースに定義済みの値を設定したいとします。

今のところ、私は定数の束を定義する必要があります。アプリケーション内ではデータベースから取得する必要があります。たとえば、それは行の_idを提示するか、またはコードにimageを提供する必要があります。

私は今、このようにそれをやっている:

public class Constants { 

    public static final int CATEGORY_FOOD = 1; 
    public static final int CATEGORY_SHOPPING = 2; 
    public static final int CATEGORY_HOUSING = 3; 
    public static final int CATEGORY_TRANSPORTATION = 4; 
    public static final int CATEGORY_VEHICLE = 5; 
    public static final int CATEGORY_LIFE = 6; 
    public static final int CATEGORY_COMMUNICATION = 7; 
    public static final int CATEGORY_FINANCIAL_EXPENSES = 8; 
    public static final int CATEGORY_BAD_HABBITS = 9; 
    public static final int CATEGORY_EDUCATION = 10; 
    public static final int CATEGORY_INVESTMENTS = 11; 
    public static final int CATEGORY_INCOME = 12; 

    public static final int CATEGORY_ICON_FOOD = R.drawable.ic_food; 
    public static final int CATEGORY_ICON_SHOPPING = R.drawable.ic_shopping; 
    public static final int CATEGORY_ICON_HOUSING = R.drawable.ic_housing; 
    public static final int CATEGORY_ICON_TRANSPORTATION = R.drawable.ic_transportation; 
    public static final int CATEGORY_ICON_VEHICLE = R.drawable.ic_car; 
    public static final int CATEGORY_ICON_LIFE = R.drawable.ic_tickets; 
    public static final int CATEGORY_ICON_COMMUNICATION = R.drawable.ic_communication; 
    public static final int CATEGORY_ICON_FINANCIAL_EXPENSES = R.drawable.ic_voucher; 

    public static final String TYPE_EXPENSE = "expense"; 
    public static final String TYPE_INCOME = "income"; 

} 



public class App extends Application { 

    @Override 
    public void onCreate() { 
     super.onCreate(); 
     defineCategories(); 
    } 

    private void defineCategories() { 
     /* Shared Preferences value */ 
     if (defineVersion != 1) return; 

     Category category1 = new Category(); 
     category1.setTitle("Food & Drinks"); 
     category1.setType(TYPE_EXPENSE); 
     mCategoryBox.put(category1); 

     Category category2 = new Category(); 
     category2.setTitle("Shopping"); 
     category2.setType(TYPE_EXPENSE); 
     mCategoryBox.put(category2); 

     Category category3 = new Category(); 
     category3.setTitle("Housing"); 
     category3.setType(TYPE_EXPENSE); 
     mCategoryBox.put(category3); 

     Category category24 = new Category(); 
     category24.setTitle("Toll road"); 
     category24.setType(TYPE_EXPENSE); 

     Category category4 = new Category(); 
     category4.setTitle("Transportation"); 
     category4.setType(TYPE_EXPENSE); 
     category4.subCategories.add(category24); 
     mCategoryBox.put(category4); 

     Category category5 = new Category(); 
     category5.setTitle("Vehicle"); 
     category5.setType(TYPE_EXPENSE); 
     mCategoryBox.put(category5); 
    } 
} 

は、この必要性のためのより多くの、より良い解決策はありますか?

+0

データベースクラスはどこですか?データベースクラスを提供します。 –

+0

データベースクラスはありません、私はObjectBoxライブラリを使用しています。 – aleksandrbel

答えて

0

私はあなたのゴールに達するためにウォーキングスルーを見せます。 ContentProviderを作成してテーブルを作成する方法などは投稿しません。 ここでは、定義済みの値の設定方法に焦点を当てます。

さんがあなたののContentProviderを開始したときにそれについて

のonCreate方法はcall.hereになります考えてみましょうは、データベースが作成された後、あなたが事前定義された値を置くことができる最高の場所です。

データベースが作成されたときに設定テーブルを作成して、そこに定義済みの値を追加します。を作成します。メソッドを作成します。

私はそれはあなたのアプリがに発売されるたびに、それは例外を通過したり、データを挿入するために繰り返さ作品ことになるだろうので、私はあなたをお勧めしません別の方法が.thereで定義済みの値を設定するためのより良い方法だと思います設定へ。あなたが設定テーブルに値を挿入したときに、あなたのアプリが、このメソッドが呼び出されます起動のために事前に定義された値を使用してのContentProviderでメソッドを作成し、最後の段落

について

前回のように最後のアプローチをおすすめしません。

幸運!

+0

ええ、ありがとう。私はContentProvidersの使い方を知っていますが、今はObjectBoxライブラリを使ってContentProvidersの定型文を取り除いています。 – aleksandrbel

関連する問題