2016-12-27 2 views
-1

Просматривайте учебное пособие по ссылке ниже, чтобы иметь простое приложение для Android с несколькими действиями.Приложение Сбой при подключении к действию

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

Я следовал инструкциям, как указано в руководстве андроида, я бегу в NullPointer Exception на EditText Widget,

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> 

Любые указания здесь, чтобы пройти мимо этого?

+3

'EditText' находится в макете действий вместо' view' (который является экземпляром щелчка View (в вашем случае это Button)), поэтому просто используйте его без 'view', например:' editText = (EditText) findViewById (R.id.edit_message); ' –

+0

, где вы назвали свой« sendMessage »и не используете« view ». , инициализируйте без этого. –

+0

@ ρяσѕρєяK является правильным. –

ответ

0

Ваша функция находится в Activity, поэтому вам не нужно делать view.findViewById(). Вместо этого, просто сделайте следующее:

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

NullPoint обращения к тем объектам, которые имеют нулевые значения, поставить правильный идентификатор и код:

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

    } 
} 
0

Вы пытаетесь найти EditText из щелкнуло button

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

Вы должны найти его от деятельности

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

Читайте, что учебник снова, вы заметить разницу

2

на линии мыши:

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

"вид", что кнопка. и используя view.findViewById, вы пытаетесь найти требуемое представление в этой кнопке (которая не является родителем вами EditText). Таким образом, вы должны попробовать следующие способы:

Direct:

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

здесь findViewById попытается найти идентификатор в текущей деятельности.

использования parentView:

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

здесь ваш button's родитель EditText's родителя, так что это будет найти вас EditText по этому коду также.

+1

Спасибо, NehaK, объяснение очень четкое и точно. –

+0

приветствуется! .. пожалуйста мой ответ как правый. – NehaK

0

Как совет, я бы сначала попросил, чтобы он не был пустым или пустым.

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

После того как я бы следовать советам ρяσѕρєя K:

EditText в деятельности макете, а не в целях (что экземпляр из щелкнули View (в вашем случае это кнопка)), поэтому просто подключитесь к нему без . Смотрите: editText = (EditText) findViewById (R.id.edit_message);

Смежные вопросы