1

ユーザーが情報を入力するために使用するダイアログフラグメントがあります。ユーザーが[OK]をクリックすると、情報はインターフェイスを介してメインアクティビティに戻され、データベースに入れようとします。これはダイアログのポジティブクリックコードです:

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

dbパーツをコメントアウトすると、トーストが正しく表示されるため、データが渡されていることがわかります。ダイアログフラグメントを使用しない他のアクティビティでは正常に機能するため、データベースに問題はないと思います。私が得るエラーメッセージはこれです:

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

私はこれを修正するために多くのことを試みましたが、それを理解することはできません。これは許可されていないものですか、それとも私は何かを見逃しているだけですか?主な活動は断片的な活動でもあります。

4

1 に答える 1

1

私はこれに何時間も費やしてあきらめましたが、偶然に解決策を発見しました. 通常何かを宣言する DialogFragment クラスの先頭で新しいデータベースを宣言しても機能しませんが、onCreateDialog メソッド内で宣言すると機能します。

例:

onCreateDialog(){

DatabaseHandler db = 新しい DatabaseHandler(getActivity());

// 今すぐロックなしで db を使用します。

}

于 2013-07-14T05:47:08.127 に答える