正在通过以下链接中的教程,以具有一个不止一个活动的简单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);
再次阅读该教程,您会发现差异