DialogFragment打开Database,DatabaseLocked

时间:2013-03-03 00:05:23

标签: android android-dialogfragment

我有一个用于用户输入信息的dialogfragment。当用户单击“确定”时,信息将通过我尝试将其放入数据库的接口传递回主活动。 这是对话正面点击代码:

     .setPositiveButton("Ok", new DialogInterface.OnclickListener(){
     @Override
     public void onClick(DialogInterface dialog, int which){
         name = edittextname.getText().toString();
         details = edittextdetails.getText().toString();

         bundle.putString("name", name);
         bundle.putString("detail", detail);

         mListener.OnAddInfo(Bundle);

并且在mainactivity我实现了接口,这在代码中:

    public void OnAddInfo(Bundle bundle){
         name = bundle.getString("name");
         detail = bundle.getString("detail");

    db.open();
    long id = db.insertInfo(name, detail);
    db.close();

    Toast.makeText(this, "Added " + name, Toast.LENGTH_SHORT).show();
    }

我知道数据正在传递,因为当我注释掉db部分时,toast正确显示。我不认为我的数据库存在问题,因为在其他不使用对话框片段的活动中它可以正常工作。我得到的错误是:

      FATAL EXCEPTION: main
      java.lang.NullPointerException at
      android.database.sqlite.SQLiteOpenHelper
      .getDatabaseLocked(SQLiteOpenHelper.java:224)

我已经尝试了很多东西来解决这个问题,但是无法弄明白。这只是不允许的事情,还是我错过了什么?主要活动也是碎片活动。

1 个答案:

答案 0 :(得分:1)

我花了好几个小时就放弃了,只是偶然发现了一个解决方案。在您通常声明内容的DialogFragment类的开头声明新数据库不起作用,但在onCreateDialog方法中声明它有效!

示例:

onCreateDialog(){

DatabaseHandler db = new DatabaseHandler(getActivity());

//现在使用db而没有锁定。

}