Java 如何将EditText中的文本插入数据库?

Java 如何将EditText中的文本插入数据库?,java,android,android-sqlite,Java,Android,Android Sqlite,我正在尝试从editText获取文本,并将其输入到我的数据库中。我遇到的问题是,一旦我尝试提交文本,就会出现NullPointerException。任何帮助都将不胜感激 错误: java.lang.NullPointerException: Attempt to invoke virtual method 'android.text.Editable android.widget.EditText.getText()' on a null object reference 这是我的主要活动

我正在尝试从editText获取文本,并将其输入到我的数据库中。我遇到的问题是,一旦我尝试提交文本,就会出现
NullPointerException
。任何帮助都将不胜感激

错误:

 java.lang.NullPointerException: Attempt to invoke virtual method 'android.text.Editable android.widget.EditText.getText()' on a null object reference
这是我的主要活动

public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()){

        case R.id.action_add_task:

            final EditText text = (EditText)findViewById(R.id.editText);

            AlertDialog dialog = new AlertDialog.Builder(this)
                    .setTitle("Add New Task")
                    .setMessage("what do you want to do next")
                    .setView(R.layout.custom_view)
                    .setPositiveButton("Add", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {

                            String task;
                            task = text.getText().toString();

                            dbHelper.insertNewTask(task);
                            if(getFragmentRefreshListener()!=null) {
                                getFragmentRefreshListener().onRefresh();
                            }
                            loadTaskList();
                        }
                    })
                    .setNegativeButton("Cancel",null)
                    .create();
            dialog.show();

            return true;
    }
    return super.onOptionsItemSelected(item);
}
  <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="Enter a task"
        android:id="@+id/editText" />
my自定义视图.xml

public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()){

        case R.id.action_add_task:

            final EditText text = (EditText)findViewById(R.id.editText);

            AlertDialog dialog = new AlertDialog.Builder(this)
                    .setTitle("Add New Task")
                    .setMessage("what do you want to do next")
                    .setView(R.layout.custom_view)
                    .setPositiveButton("Add", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {

                            String task;
                            task = text.getText().toString();

                            dbHelper.insertNewTask(task);
                            if(getFragmentRefreshListener()!=null) {
                                getFragmentRefreshListener().onRefresh();
                            }
                            loadTaskList();
                        }
                    })
                    .setNegativeButton("Cancel",null)
                    .create();
            dialog.show();

            return true;
    }
    return super.onOptionsItemSelected(item);
}
  <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="Enter a task"
        android:id="@+id/editText" />

我的活动\u main.xml:

<android.support.design.widget.TabLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/tablayout"
        android:background="@color/colorPrimaryDark"
        android:minHeight="?attr/actionBarSize"
        >

    </android.support.design.widget.TabLayout>

     <android.support.v4.view.ViewPager
            android:id="@+id/pager"
            android:layout_width="match_parent"
            android:layout_height="fill_parent"
            android:backgroundTint="@android:color/darker_gray"
            android:visibility="visible">

            <ListView
                android:id="@+id/lstTask"
                android:layout_width="match_parent"
                android:layout_height="match_parent"

                android:layout_alignParentStart="true"
                android:layout_alignParentTop="true"
                android:text="@string/tasks"
                android:textSize="30sp" />
        </android.support.v4.view.ViewPager>

由于我看不到
MainActivity
布局的xml,这里是最有可能导致NPE的原因

 final EditText text = (EditText)findViewById(R.id.editText);
在活动视图层次结构中搜索编辑文本时(假设从对话框创建中显示的内容),您应该在对话框视图层次结构中搜索它

      .setView(R.layout.custom_view)
您正在将该视图设置为对话框的视图,这可能是导致异常的原因。尝试在onClick方法中细化对编辑文本的引用,如下所示:

 AlertDialog dialog = new AlertDialog.Builder(this)
                .setTitle("Add New Task")
                .setMessage("what do you want to do next")
                .setView(R.layout.custom_view)
                .setPositiveButton("Add", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {

                        final EditText text = ((AlertDialog)dialog).findViewById(R.id.editText);
                        String task;
                        task = text.getText().toString();

                        dbHelper.insertNewTask(task);
                        if(getFragmentRefreshListener()!=null) {
                            getFragmentRefreshListener().onRefresh();
                        }
                        loadTaskList();
                    }
                })
                .setNegativeButton("Cancel",null)
                .create();
        dialog.show();

以下是解决我问题的方法:

我改变了这一行:

final EditText text = ((AlertDialog)dialog).findViewById(R.id.editText);
为此:

final EditText text = (EditText) ((AlertDialog)dialog).findViewById(R.id.editText);

那么您的任务代码在哪里呢?请尝试将editText声明为全局变量。问题在于您的自定义视图!你能上传“MainActivity”中的xml布局集吗?我添加了我的activity\u main.xml,自定义视图有什么问题吗?我尝试了这个方法,但得到了相同的错误:java.lang.NullPointerException:尝试调用虚拟方法“android.text.Editable android.widget.EditText.getText()'在空对象引用上尝试更改到此行时:final EditText text=((AlertDialog)dialog).findViewById(R.id.EditText);我收到不兼容的类型错误,“必需的:android.widget.Edit.text”,“找到的:android.view.view”您必须使用android studio的过时版本,因为较新版本不需要强制转换视图。你发布的答案是我建议的,这不是很礼貌,但只要你解决了你的问题。。