Olá,
Estou com o seguinte problema e não estou sendo capaz de encontrar o porque dele estar acontecendo:
Ao clicar no botão Salvar na actionBar do formulário é lançado um NullPointerException.
Este é o código para o clique no botão
public boolean onOptionsItemSelected(MenuItem item) {
if(item.getItemId() == R.id.menu_formulario_ok) {
Aluno aluno = helper.pegaAluno();
Toast.makeText(FormularioActivity.this, "Contato" + aluno.getNome() + "Salvo!", Toast.LENGTH_SHORT).show();
finish();
}
return super.onOptionsItemSelected(item);
}
Na classe FormularioHelper o que temos é o seguinte:
private EditText campoNome;
private EditText campoEndereco;
private EditText campoTelefone;
private EditText campoSite;
private RatingBar campoNota;
FormularioHelper(FormularioActivity activity){
campoNome = (EditText) activity.findViewById(R.id.form_nome);
campoEndereco = (EditText) activity.findViewById(R.id.form_endereco);
campoTelefone = (EditText) activity.findViewById(R.id.form_telefone);
campoSite = (EditText) activity.findViewById(R.id.form_site);
campoNota = (RatingBar) activity.findViewById(R.id.form_nota);
}
public Aluno pegaAluno(){
Aluno aluno = new Aluno();
if(aluno != null )
System.out.println("Aluno não é null");
if(campoNome == null)
System.out.println("CampoNome é nulo");
aluno.setNome(campoNome.getText().toString());
/*aluno.setEndereco(campoEndereco.getText().toString());
aluno.setTelefone(campoTelefone.getText().toString());
aluno.setSite(campoSite.getText().toString());
aluno.setNota(Double.valueOf(campoNota.getProgress()));*/
return aluno;
}
Inseri esses logs e confirmei que de fato, o método findViewById está retornando null, consultando a documentação verifiquei que isto ocorre quando ele não encontra a View. O que não entendo é o porque ele não localiza, pois aparentemente os id's correspondem com o XML (usei o refactor para renomear, só para ter certeza).
<EditText
android:id="@+id/form_nome"
android:hint="@string/nome"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<EditText
android:id="@+id/form_endereco"
android:hint="@string/endereco"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<EditText
android:id="@+id/form_telefone"
android:hint="@string/telefone"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<EditText
android:id="@+id/form_site"
android:hint="@string/site"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<RatingBar
android:layout_width="wrap_content"
android:layout_height="73dp"
android:numStars="5"
android:layout_gravity="center"
android:id="@+id/form_nota" />
Obs: em FormularioActivity a classe FormularioHelper é instanciada a passando como parâmetro para o construtor :
protected void onCreate(Bundle savedInstanceState) {
helper = new FormularioHelper(this);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_formulario);}
Por fim, estes são os logs do erro
E/AndroidRuntime: FATAL EXCEPTION: main
Process: br.com.alura.agendaalura, PID: 16254
java.lang.NullPointerException: Attempt to invoke virtual method 'android.text.Editable android.widget.EditText.getText()' on a null object reference
at br.com.alura.agendaalura.FormularioHelper.pegaAluno(FormularioHelper.java:32)
at br.com.alura.agendaalura.FormularioActivity.onOptionsItemSelected(FormularioActivity.java:35)
at android.app.Activity.onMenuItemSelected(Activity.java:3204)
at android.support.v4.app.FragmentActivity.onMenuItemSelected(FragmentActivity.java:408)
...
Alguma ideia do que possa estar acontecendo? (talvez seja algo bem idiota, mas não estou visualizando, kkkk)