2017-12-02 153 views
0

我试图从editText中获取文本并将其输入到我的数据库中。一旦我尝试提交文本,我遇到的问题就是NullPointerException。任何帮助,将不胜感激。如何从EditText插入文本到数据库中?

错误:

java.lang.NullPointerException: Attempt to invoke virtual method 'android.text.Editable android.widget.EditText.getText()' on a null object reference 

这是从我的MainActivity

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

custom_view.xml

<EditText 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:hint="Enter a task" 
     android:id="@+id/editText" /> 

我activity_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> 
+0

那么你的任务代码在哪里? – Xenolion

+0

尝试将editText声明为全局变量 –

+0

问题在于您的自定义视图在这里! – Xenolion

回答

1

好,因为我不能看到XML为MainActivity布局,这就是最有可能是造成的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(); 
+0

我试过这个,但我得到了同样的错误:java.lang.NullPointerException:试图调用虚拟方法'android.text.Editable android.widget.EditText.getText()'在空对象引用 – SFDEV

+0

试图更改为此时line:final EditText text =((AlertDialog)dialog).findViewById(R.id.editText);我收到不兼容的类型错误,“必需:android.widget.Edit.text”,“发现:android.view.View” – SFDEV

+0

你必须使用过时的版本的android studio导致新的不需要投的视图。你发布的答案是我的建议,这不是很有礼貌,但只要你解决了你的问题.. –

0

以下是固定我的问题:

我改变了这一行:

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

要这样:

final EditText text = (EditText) ((AlertDialog)dialog).findViewById(R.id.editText); 
相关问题