连接活动时,应用程序崩溃



正在通过以下链接中的教程,以具有一个不止一个活动的简单Android应用。

https://developer.android.com/training/basics/firstapp/starting-activity.html

我遵循了Android教程中指定的步骤,我遇到了EditText Widget上的nullpointer异常,

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

以下是我的mainActivity.java,尽管我认为我以正确的方式将其汇总为null,但

public class MainActivity extends AppCompatActivity {
public final static String EXTRA_MESSAGE = "com.my.application.message";
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
}
public void sendMessage(View view){
    Intent intent = new Intent( this , DisplayMessageActivity.class);
    EditText editText;
    editText = (EditText) view.findViewById(R.id.edit_message);
    System.out.println("the values is "+ editText);
    String message = editText.getText().toString();
    intent.putExtra(EXTRA_MESSAGE,message);
    startActivity(intent);
   }
}

及以下是activity_main.xml,

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:tools="http://schemas.android.com/tools"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:orientation="horizontal">
 <EditText android:id="@+id/edit_message"
     android:layout_width="0dp"
     android:layout_weight="1"
     android:layout_height="wrap_content"
     android:hint="@string/edit_message" />
 <Button
     android:id="@+id/button"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:text="@string/do_send"
     android:onClick="sendMessage"/>
</LinearLayout>

这里有任何指示可以超越这个?

在单击行上:

   editText = (EditText) view.findViewById(R.id.edit_message);

"视图"是该按钮。通过使用view.findViewById,您正在尝试在该按钮中查找所需的视图(这不是您的EditText的父母)。因此,您应该尝试以下方式:

直接:

editText = (EditText) findViewById(R.id.edit_message);

这里findViewById将尝试在当前活动中找到ID。

使用parentView:

editText = (EditText) (view.getParent().findViewById(R.id.edit_message));

在这里您的 button's父级是 EditText's parent,所以它也会通过此代码找到您的 EditText

您的功能在Activity中,因此您无需执行view.findViewById()。相反,只需执行以下操作:

EditText editText;
editText = (EditText) findViewById(R.id.edit_message);

NullPoint地址为那些具有空值的对象,放置正确的ID和代码:

public class MainActivity extends AppCompatActivity {
public final static String EXTRA_MESSAGE = "com.my.application.message";
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
}

public void sendMessage(View view){
    Intent intent = new Intent( this , DisplayMessageActivity.class);
    EditText editText;
    editText = (EditText) findViewById(R.id.edit_message); //here
    System.out.println("the values is "+ editText);
    String message = editText.getText().toString();
    intent.putExtra(EXTRA_MESSAGE,message);
    startActivity(intent);
   }
}

作为建议,我首先要寻找它不是空的或空的。

       if(editText != null && !editText.getText.toString.equals("")) {
            ...
       }

在我遵循ρVim的建议之后:

deDittext在活动布局中而不是在视图中(这是实例 单击视图(在您的情况下是按钮)),因此只需访问它 查看类似:dedittext =(dedittext)findViewById(r.id.edit_message);

您正在尝试从单击的button

找到EditText
editText = (EditText) view.findViewById(R.id.edit_message);

您必须从活动中找到它

editText = (EditText) findViewById(R.id.edit_message);

再次阅读该教程,您会发现差异

最新更新