Quando aperto o botão para ir para a activity do formulario, o aplicativo fecha e essa mensagem "Unfortunately, Agenda has stopped" é apresentada na tela. Alguma ideia do que pode ser?
Quando aperto o botão para ir para a activity do formulario, o aplicativo fecha e essa mensagem "Unfortunately, Agenda has stopped" é apresentada na tela. Alguma ideia do que pode ser?
Fala ai Pedro, de boa ?
Cara isso acontece quando há alguma exceção no seu código.
Provavelmente o erro está sendo exibido no logcat, consegue mostrar para gente ?
06-04 14:17:03.021 2793-2793/br.com.alura.agenda E/AndroidRuntime: FATAL EXCEPTION: main
Process: br.com.alura.agenda, PID: 2793
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{br.com.alura.agenda/br.com.alura.agenda.FormularioActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.Window$Callback android.view.Window.getCallback()' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2327)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
at android.app.ActivityThread.-wrap11(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.Window$Callback android.view.Window.getCallback()' on a null object reference
at android.support.v7.app.AppCompatDelegateImplBase.<init>(AppCompatDelegateImplBase.java:117)
at android.support.v7.app.AppCompatDelegateImplV9.<init>(AppCompatDelegateImplV9.java:149)
at android.support.v7.app.AppCompatDelegateImplV14.<init>(AppCompatDelegateImplV14.java:56)
at android.support.v7.app.AppCompatDelegateImplV23.<init>(AppCompatDelegateImplV23.java:31)
at android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:200)
at android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:183)
at android.support.v7.app.AppCompatActivity.getDelegate(AppCompatActivity.java:519)
at android.support.v7.app.AppCompatActivity.findViewById(AppCompatActivity.java:190)
at br.com.alura.agenda.FormularioHelper.<init>(FormularioHelper.java:17)
at br.com.alura.agenda.FormularioActivity.<init>(FormularioActivity.java:16)
at java.lang.Class.newInstance(Native Method)
at android.app.Instrumentation.newActivity(Instrumentation.java:1067)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2317)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
at android.app.ActivityThread.-wrap11(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Oi Pedro, pode mostrar sua classe FormularioActivity ?
Consegui resolver o problema, não sabia desse logCat. O problema era tá usando o FormularioHelper como atributo do FormularioActivity, quando aquele iria ser construido, dava um problema por não ter nada no campo nome, que é obrigatório. Bom, eu acho que era isso. Agora só to com um problema em mostrar o nome do Aluno na lista. Mas acho que é aquele lance de toString do objeto. Não to lembrando muito bem agora
Basta sobreescrever o método toString na classe aluno e dar o comportamento que você quer. :D
A classe aluno tem que estar estendida da Classe Object ou isso é implícito já? Porque esse método toString é da classe Object certo? Ou basta implentar o método da seguinte forma?
public void toString(){
super(Aluno.nome)
}
Então, toda classe já extende de Object por padrão.
Acho que você ainda não viu alguns cursos que podem te ajudar a aproveitar o máximo desses de android, dá uma olhadinha nos cursos dessa carreira, você vai conseguir aprender bastante coisa: https://cursos.alura.com.br/career/desenvolvedor-java-junior
Eu entendi o lance do método, já o sobrescrevi, mas em vez do nome aparece a seguinte informação: android.support.v7.widget.appCompatEditText{33f007c VFED..CL. ........0,0-480,68 #7f07003d app:id/formulario_nome}
O sobrescrevi da seguinte forma:
public String toString(){
return getId() + " - " + getNome();
}
o que você tá fazendo no seu helper ?
Provavelmente não tá pegando o texto do edittext.
Assim tá o helper:
package br.com.alura.agenda;
import android.widget.EditText;
import android.widget.RatingBar;
import br.com.alura.agenda.modelo.Aluno;
public class FormularioHelper {
private EditText campoNome;
private EditText campoEndereco;
private EditText campoTelefone;
private EditText campoSite;
private RatingBar campoNota;
FormularioHelper(FormularioActivity activity){
this.campoNome = activity.findViewById(R.id.formulario_nome);
this.campoEndereco = activity.findViewById(R.id.formulario_endereco);
this.campoTelefone = activity.findViewById(R.id.formulario_telefone);
this.campoSite = activity.findViewById(R.id.formulario_site);
this.campoNota = activity.findViewById(R.id.formulario_nota);
}
public Aluno pegaAluno(){
Aluno novo = new Aluno();
novo.setNome(campoNome.toString());
novo.setEndereco(campoEndereco.toString());
novo.setTelefone(campoTelefone.toString());
novo.setSite(campoSite.toString());
novo.setNota(Double.valueOf(campoNota.getProgress()));
return novo;
}
}
Então, você precisa pegar o texto da sua propriedade:
editText.getText().toString()
Dá forma que você tá fazendo :
editText.toString()
Você tá pegando o toString do objeto EditText que pega a referencia de memoria e tudo mais.
Entendo, agora foi. Muito obrigado pela ajuda o/