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

时间:2016-12-27 16:09:33

标签: android nullpointerexception

我正在浏览以下链接中的教程,以获得一个包含多个活动的简单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>

这里有什么指示可以解决这个问题吗?

5 个答案:

答案 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);