1

我有一个对话框片段供用户输入信息。当用户单击确定时,信息通过我尝试将其放入数据库的界面传递回主要活动。这是对话框正面点击代码:

     .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);

在主要活动中,我在代码中实现了接口和这个:

    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();
    }

我知道数据正在传递,因为当我注释掉数据库部分时,吐司正确出现。我认为我的数据库没有问题,因为在其他不使用对话片段的活动中它工作正常。我得到的错误信息是这样的:

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

我已经尝试了很多方法来解决这个问题,但无法弄清楚。这只是不允许的事情还是我只是错过了什么?mainactivity也是一个fragmentactivity。

4

1 回答 1

1

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

例子:

onCreateDialog(){

DatabaseHandler db = new DatabaseHandler(getActivity());

// 现在使用没有锁的 db。

}

于 2013-07-14T05:47:08.127 回答