1

私は作業中のタブ付きレイアウトを持っています。2 番目のタブでは、アイテムのリストを維持します。最初のタブの別のリストから項目を削除すると、静的な add メソッドを呼び出して 2 番目のタブに追加する必要があります。アプリの最初の起動時にこれを行うと、2 番目のタブにあるアクティビティでデータベース変数が初期化されていない (デバッガーを使用してチェックされている) (onCreate メソッドが呼び出されていない) ため、null ポインター例外が発生します。ただし、アプリを起動してタブに切り替え、最初のタブに戻ってアイテムを削除すると、onCreate メソッドが呼び出されたため、通常どおりに動作します。だから私の質問はこれです.データベースがインスタンス化されていること、または静的メソッドを呼び出して追加する前に2番目のアクティビティ/タブのonCreateを確認するにはどうすればよいですか?

静的メソッドを呼び出すコードは次のとおりです

ShoppingListActivity.addToShoppingList(name, quan);

ここに静的メソッドがあります

public static void addToShoppingList(String name, int quan)
{   
    shoppingDb.insertFood(name, quan);
}

onCreate が呼び出されていないため、初期化されておらず null を返しているのは shoppingDb 変数です。

4

1 に答える 1

0

静的メソッドを使用しているので、2 番目のタブで静的ブール変数を使用してみませんか。これは、アプリケーションの起動時に false になり、OnCreate メソッドが呼び出されたときに true になります。その後、addToShoppingList メソッドでアクティビティの準備状況をテストできます。しかし、それを使用するには、DB が初期化される前に来るデータを保存する必要があります。

このような:

class ShopItemData{
    public String name;
    public int quan;
    public ShopItemData(String n, int q){
         name = n;
         quan = q;
    }
}

private static ArrayList<ShopItemData> shopItems = new ArrayList<ShopItemData>();
private static boolean isDBInitialized = false;


@Override
public void onCreate(Bundle savedInstanceState) {
     ...
     //initialize your database
     isDBInitialized = true;
}

...

public static void addToShoppingList(String name, int quan)
{   
    if (isDBInitialized){
        if (shopItems.size() > 0){
            for(ShopItemData item:shopItems){
                shoppingDb.insertFood(item.name,item.quan);
            }
            shopItems.clear();
        }
        shoppingDb.insertFood(name, quan);
    }else{ 
        shopItems.add(new ShopItemData(name,quan));
    }
}
于 2013-10-08T21:35:10.610 に答える