代码之家  ›  专栏  ›  技术社区  ›  Malfist

为什么我的Android应用程序在Row insert上崩溃?

  •  1
  • Malfist  · 技术社区  · 14 年前

    我刚刚开始使用android开发,我遇到了一些教科书帮不了我的问题。

    这是我的插入函数: 公共长插入项(预算项){ 断言item.id=-1;

        ContentValues newBudgetValues = new ContentValues();
        newBudgetValues.put("name", item.name);
        newBudgetValues.put("balance", item.balance);
    
        item.id = db.insert(DATABASE_TABLE_NAME, null, newBudgetValues);
    
        return item.id;
    }
    

    这是我的表定义:

    private static final String TABLE_CREATE = "CREATE " + DATABASE_TABLE_NAME + "(\n" +
        "id INTEGER PRIMARY KEY AUTOINCREMENT, \n" +
        "name TEXT, \n" +
        "balance DOUBLE);";
    

    这就是在适配器崩溃之前调用它的原因:

            BudgetsAdapter adapter = new BudgetsAdapter(getBaseContext());
            BudgetsItem newBudget = new BudgetsItem(budgetName, balance);
            if(adapter.insertEntry(newBudget) != -1){
                Toast.makeText(getApplicationContext(), "Budget Created!", Toast.LENGTH_SHORT);
                finish();
            }else{
                Toast.makeText(getApplicationContext(), "Oops, something failed.", Toast.LENGTH_SHORT);
            }
    

    它在db.insert行上崩溃,出现NullPointerException。有人能告诉我为什么吗?

    2 回复  |  直到 14 年前
        1
  •  1
  •   Jason Rogers    14 年前

    你没有给我们任何关于你的数据库对象的信息(我想代表你的数据库。

    既然您说它在db insert上崩溃了,我就不得不猜测在您执行insert时db还没有初始化。 我建议 1)添加一个if(db!=空)

    如果崩溃日志中的最后一行有效地位于db.insert上。

    如果还有更多的行,请将您的堆栈添加到您的帖子中,以便我们帮助您

        2
  •  1
  •   Cristian    14 年前

    在这种情况下,只有一件事可以为空: db . 你确定你正在初始化它们吗?