2016-05-29 5 views
-1

Я просмотрел многие подобные вопросы и попытался реализовать предоставленные решения. Кажется, что ничто не удаляет «NullPointerException», которое нарушает приложение, которое я пытаюсь создать. Я всегда использовал этот метод для кнопок без каких-либо проблем, и я понятия не имею, как решить эту проблему.Проблема с NullPointerException с setOnClickListener

Ниже представлен мой простой класс java, где метод setOnClickListener вызывает предупреждение.

public class pennState extends AppCompatActivity { 
    Button buttonNext; 
@Override 
public void onCreate(Bundle savedInstanceState){ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.penn_state_1); 

    buttonNext = (Button) findViewById(R.id.buttonNext); 
    buttonNext.setOnClickListener(myHandler1); 

} 
View.OnClickListener myHandler1 = new View.OnClickListener() { 
    public void onClick(View v) { 
     Intent i = new Intent(pennState.this, pennState2.class); 
     startActivity(i); 
    } 
}; 
} 

Я проверил идентификатор свойств xml, и все кажется точным. Любая помощь приветствуется.

<Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Next" 
     android:id="@+id/buttonNext" 
     android:layout_alignTop="@+id/buttonConfirm" 
     android:layout_toEndOf="@+id/textView95" /> 

Заранее благодарен! :)

+0

мы можем помочь вам лучше, если вы разместите свой журнал ошибок. – pooyan

+0

Я так не думаю. На самом деле очевидно и очевидно, что переменная myHandler1 бросает NPE. – RoccoDev

+0

* где метод setOnClickListener вызывает предупреждение. *. Это означает, что это потенциально может быть NPE. Если вы указали виджет в своем макете, вы можете его игнорировать. – Blackbelt

ответ

3

Вы вызываете эту переменную перед ее объявлением. А также добавьте myHandler1 в onCreate().

Вы также можете добавить это свойство в XML-тег

android:onClick="myMethod" 

А потом объявить этот метод

public void myMethod(View view){} 

И поставить то, что вы хотите делать, когда кнопка нажата между фигурными скобками.

+0

Во-первых, это не проблема. Во-вторых, если вы собираетесь помечать вопрос как дубликат, вы не должны отвечать на него. –

0

Поместите объявление переменной выше, наряду с кнопкой, и инициализировать его в onCreate:

public class pennState extends AppCompatActivity { 
Button buttonNext; 
View.OnClickListener myHandler1; 
@Override 
public void onCreate(Bundle savedInstanceState){ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.penn_state_1); 

    myHandler1 = new View.OnClickListener() { 
     public void onClick(View v) { 
      Intent i = new Intent(pennState.this, pennState2.class); 
      startActivity(i); 
    } 
}; 

    buttonNext = (Button) findViewById(R.id.buttonNext); 
    buttonNext.setOnClickListener(myHandler1); 
} 
+0

И ... что я сказал перед тобой? – RoccoDev

+0

Ой, извините, забыл загрузить новый ответ, пока я смотрел на другие вкладки, и вы ответили. Не получай соленый :) – Vucko

+0

Это также происходит со мной; D Не волнуйся – RoccoDev

0

Вы можете просто передать new OnClickListener в setOnClickListener кнопки вместо этого объявить в качестве локальной переменной. Вы могли бы сделать что-то вроде этого:

@Override 
    public void onCreate(Bundle savedInstanceState){ 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.penn_state_1); 

     buttonNext = (Button) findViewById(R.id.buttonNext); 
     buttonNext.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
      Intent i = new Intent(pennState.this, pennState2.class); 
      startActivity(i); 
      } 
     }); 
    } 
Смежные вопросы