我正在浏览以下链接中的教程,以获得一个包含多个活动的简单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,其中editText的异常返回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>
这里有什么指示可以解决这个问题吗?
答案 0 :(得分:2)
点击线:
editText = (EditText) view.findViewById(R.id.edit_message);
&#34;视图&#34;是那个按钮。并使用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
家长,所以它也会通过此代码找到您EditText
。
答案 1 :(得分:0)
您的功能位于Activity
,因此您无需执行view.findViewById()
。相反,只需执行以下操作:
EditText editText;
editText = (EditText) findViewById(R.id.edit_message);
答案 2 :(得分:0)
JSONObject data = response.getJSONObject("data");
JSONArray children = data.getJSONArray("children");
对那些具有空值的对象进行寻址,输入正确的id和代码:
NullPoint
答案 3 :(得分:0)
您正试图从点击的var colors = ["red","yellow","blue"];
var color1 = prompt("Enter first color: yellow, red or blue");
while(colors.indexOf(color1)==-1){
color1 = prompt("Enter first color: yellow, red or blue");
}
var color2 = prompt("Enter second color: yellow, red or blue");
EditText
button
您必须从活动
中找到它editText = (EditText) view.findViewById(R.id.edit_message);
再次阅读该教程,你会发现差异
答案 4 :(得分:0)
作为建议,我首先要求它不是空或空。
if(editText != null && !editText.getText.toString.equals("")) {
...
}
在我遵循ρяσѕρєяK的建议之后:
EditText处于Activity布局而不是视图中(这是实例 单击View(在你的情况下是Button)),所以只需访问它 查看类似:editText =(EditText)findViewById(R.id.edit_message);