Java 无法使用DialogFragment将记录添加到sqlite数据库

Java 无法使用DialogFragment将记录添加到sqlite数据库,java,android,eclipse,sqlite,android-dialogfragment,Java,Android,Eclipse,Sqlite,Android Dialogfragment,我正在尝试将记录添加到我的sqlite数据库中。如果单击“添加”,将打开一个对话框片段。然后,当您将一些信息写入textfield并在微调器中选择一个选项时,应该将其添加到sqlite数据库中。如果我从主要活动开始做,这会起作用。但是我只有在我试图从DialogFragment中获得相同的信息时才会得到FC 对话框片段代码: public class CustomDialogFragment extends DialogFragment { Spinner spin; Edit

我正在尝试将记录添加到我的sqlite数据库中。如果单击“添加”,将打开一个对话框片段。然后,当您将一些信息写入textfield并在微调器中选择一个选项时,应该将其添加到sqlite数据库中。如果我从主要活动开始做,这会起作用。但是我只有在我试图从DialogFragment中获得相同的信息时才会得到FC

对话框片段代码:

public class CustomDialogFragment extends DialogFragment {

    Spinner spin;
    EditText etNumber, etForwardNumber;
    Boolean initialDisplay = true;
    Database mDB = new Database(getActivity());
    Cursor c;

public void DialogFragment(){
    // Empty constructor required for DialogFragment
}

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());

    View view = getActivity().getLayoutInflater().inflate(R.layout.activity_dialog, null);

    etNumber = (EditText)view.findViewById(R.id.etNumber);
    etForwardNumber = (EditText)view.findViewById(R.id.etForwardNumber);

    etNumber.setHint("Phone Number");
    etForwardNumber.setHint("Forward Number");

    etForwardNumber.setVisibility(View.GONE);

    spin = (Spinner)view.findViewById(R.id.spOptions);
    List<String> list = new ArrayList<String>();
    list.add("Block Call");
    list.add("Forward Call");

    ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(getActivity(),
            android.R.layout.simple_spinner_item, list); 
    dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    spin.setAdapter(dataAdapter);

    spin.setOnItemSelectedListener(new OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {
            Log.d("DIALOGFRAGMENT", "Option selected: " + position);
            if (position == 0) {
                Log.d("LOG_TAG", "Block");
                etForwardNumber.setVisibility(View.GONE);
                //Log.d("LOG_TAG", initialDisplay.toString());
                //initialDisplay = false;
            }else {
                Log.d("LOG_TAG", "Forward");
                etForwardNumber.setVisibility(View.VISIBLE);
            }
        }
        @Override
        public void onNothingSelected(AdapterView<?> parentView) {
            // your code here
        }

    });

    builder.setMessage("")
        .setTitle("Add a new number")
        .setView(view);
    builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int id) {
        //Hide the dialog
        }
    });
    builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int id) {
            //Add records to sqlite database
            mDB.open();
            String cname = "test";
            String caction = "Forward";
            //String cnumber = "Numbertoforward";
            ContentValues cv = new ContentValues();
            cv.put("cName", cname);
            cv.put("cAction", caction);
            //cv.put("cNumber", cnumber);
            mDB.empInsert(cv);
            c.requery();
        }
    });

    return builder.create();
}

/*@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    //Inflate the XML view for the help dialog fragment
    //View view = inflater.inflate(R.layout.activity_dialog, container);
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());

    // 2. Chain together various setter methods to set the dialog characteristics
    /*builder.setMessage("Test msg")
        .setTitle("Title");
    builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int id) {
            // User clicked OK button
        }
    });
    builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int id) {
            // User cancelled the dialog
        }
    });*/
    /*return view;
    } */
}

非常感谢您的帮助

一开始很难说,但您的数据库似乎没有正确初始化。你该走了

Database mDB = new Database(getActivity());
到您的onCreateDialog方法。将其移动到此处将确保getActivity()返回用于初始化数据库的上下文


或者,我强烈建议使用某种类型的DatabaseHelper类,该类使用单例模式。因此,您可以更灵活地从应用程序中的任何位置访问数据库。

仍然可以获取FC,但数据已添加:)
Database mDB = new Database(getActivity());