Estou com problemas no meu aplicativo de cadastro de clientes. Eu tenho uma MainActivity com campos de Login e Senha, também dois botões. O primeiro para logar e o segundo para cadastrar, caso não tenha conta. Quando eu clico no botão btncadastrar, “não possui uma conta?”, o aplicativo fecha ao invés de ir para CadastroActivity. Como faço para corrigir isso?
Eis o código da MainActivity:
public class MainActivity extends AppCompatActivity {
privateEditTextet_login,et_senha;privateButtonbtn_cadastrar;privateButtonbtn_logar;@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);et_login=(EditText)findViewById(R.id.et_login);et_senha=(EditText)findViewById(R.id.et_senha);btn_cadastrar=(Button)findViewById(R.id.btn_cadastrar);btn_logar=(Button)findViewById(R.id.btn_logar);btn_logar.setOnClickListener(newView.OnClickListener(){@OverridepublicvoidonClick(Viewv){et_login.getText();et_senha.getText();/*Intent i = new Intent(MainActivity.this, CadastroActivity.class); startActivity(i); */if(et_login.getText().length()==0||et_senha.getText().length()==0){Toast.makeText(getApplication(),"Os campos de login e senha são obrigatórios",Toast.LENGTH_LONG).show();}elseif(et_login.getText().length()<0||et_senha.getText().length()<0){Toast.makeText(getApplication(),"Os campos de login e senha são inválidos. Digite novamente!",Toast.LENGTH_LONG).show();}else{Toast.makeText(getApplication(),""+et_login.getText().toString()+"!",Toast.LENGTH_LONG).show();et_login.setText("");et_senha.setText("");}}});btn_cadastrar.setOnClickListener(newView.OnClickListener(){@OverridepublicvoidonClick(Viewv){Intenti=newIntent(MainActivity.this,CadastroActivity.class);startActivity(i);}});}}
Parece que tem alguma coisa nula lá na sua classe CadastroActivity.
java.lang.NullPointerException: Attempt to invoke virtual method ‘android.view.Window$Callback android.view.Window.getCallback()’
Vou ter q ser “chato” e pedir pra vc postar o código Java da sua CadastroActivity kkkkkkk
Tem alguma coisa errada lá que está passando despercebido por vc
Rafaela_Lima
Leonardo, ainda aparece esse erro também no AVD: E/EGL_emulation: tid 2619: eglSurfaceAttrib(1146): error 0x3009 (EGL_BAD_MATCH)
eu configurei o AVD para hardware GLSE 2.0 e nada adiantou. Mudei também para software GLSE 2.0 e nada
Rafaela_Lima
public class CadastroActivity extends MainActivity {
finalEditTextet_nome=(EditText)findViewById(R.id.et_nome);finalEditTextet_cpf=(EditText)findViewById(R.id.et_cpf);finalEditTextet_endereco=(EditText)findViewById(R.id.et_endereco);finalEditTextet_idade=(EditText)findViewById(R.id.et_idade);finalEditTextet_email=(EditText)findViewById(R.id.et_email);finalEditTextet_senha=(EditText)findViewById(R.id.et_senha);finalButtonbtn_cadastrar=(Button)findViewById(R.id.btn_cadastrar);@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_cadastro);btn_cadastrar.setOnClickListener(newView.OnClickListener(){@OverridepublicvoidonClick(Viewv){et_nome.getText();et_cpf.getText();et_endereco.getText();et_idade.getText();et_email.getText();et_senha.getText();if(et_nome.getText().length()==0||et_cpf.getText().length()==0||et_endereco.getText().length()==0||et_idade.getText().length()==0||et_email.getText().length()==0||et_senha.getText().length()==0&&et_senha.getText().length()<4){Toast.makeText(getApplication(),"Todos os campos devem ser preenchidos corretamente.",Toast.LENGTH_LONG).show();}}});}
}
Leonardo_Dias
Coloca isso aqui dentro do onCreate e tira lá de cima:
final EditText et_nome = (EditText) findViewById(R.id.et_nome);
final EditText et_cpf = (EditText) findViewById(R.id.et_cpf);
final EditText et_endereco = (EditText) findViewById(R.id.et_endereco);
final EditText et_idade = (EditText) findViewById(R.id.et_idade);
final EditText et_email = (EditText) findViewById(R.id.et_email);
final EditText et_senha = (EditText) findViewById(R.id.et_senha);
final Button btn_cadastrar = (Button) findViewById(R.id.btn_cadastrar);
Pode até tirar os final da frente de cada um
Acredito q vai resolver
Leonardo_Dias
O erro está acontecendo, porque vc está mandando o Java declarar os componentes que tem no layout, antes mesmo de declarar o layout
setContentView(R.layout.activity_cadastro);
Então vai estar tudo nulo mesmo, o Java é “burro” kkkkkkkk
Leonardo_Dias
Outra coisa, você está extendendo MainActivity, ta errado isso.
Troca pra AppCompatActivity, ficando assim:
public class CadastroActivity extends AppCompatActivity {
Rafaela_Lima
eu coloquei os componentes dentro do OnCreate e antes do setContentView(R.layout.activity_cadastro) e fica dando erro la embaixo dentro do onlickListener, fica em vermelho os componentes dentro do botão. E colocando os componentes depois do setContentView mas dentro do OnCreate, continua em vermelho os editTexts no OnlickListener. Deixando o final ele fica ok
Rafaela_Lima
mas quando rodo o programa continua dando erro, ele fecha ao clicar no botão para ir para a tela de cadastro
Leonardo_Dias
Deixa a CadastroActivity dessa forma aqui:
publicclassCadastroActivityextendsAppCompatActivity{privateEditTextet_nome;privateEditTextet_cpf;privateEditTextet_endereco;privateEditTextet_idade;privateEditTextet_email;privateEditTextet_senha;privateButtonbtn_cadastrar;@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_cadastro);et_nome=(EditText)findViewById(R.id.et_nome);et_cpf=(EditText)findViewById(R.id.et_cpf);et_endereco=(EditText)findViewById(R.id.et_endereco);et_idade=(EditText)findViewById(R.id.et_idade);et_email=(EditText)findViewById(R.id.et_email);et_senha=(EditText)findViewById(R.id.et_senha);btn_cadastrar=(Button)findViewById(R.id.btn_cadastrar);btn_cadastrar.setOnClickListener(newView.OnClickListener(){@OverridepublicvoidonClick(Viewv){if(et_nome.getText().length()==0||et_cpf.getText().length()==0||et_endereco.getText().length()==0||et_idade.getText().length()==0||et_email.getText().length()==0||et_senha.getText().length()==0&&et_senha.getText().length()<4){Toast.makeText(getApplication(),"Todos os campos devem ser preenchidos corretamente.",Toast.LENGTH_LONG).show();}}});}}
O que eu fiz?
Troquei a extensão pra AppCompatActivity
Declarei os nomes das variaveis antes do método onCreate
Instanciei as variaveis depois de declarar o layout activity_cadastro (obrigatóriamente tem de ser depois)
Declarando os nomes das variaveis lá em cima, e instanciando elas depois do layout, faz com que o Java consiga identifica-lá dentro do onClick do botão.
Faz o teste ai agora
Rafaela_Lima
Não deu certo. Continua com o mesmo erro
Leonardo_Dias
Que estranho, rodei o código aqui e funcionou.
Ta dando exatamente o mesmo erro? Copia a mensagem vermelha do LogCat de novo, por favor
Não da erro na hora de compilar porque o btn_cadastrar realmente existe, mas está no XML da página de Login e não da página de Cadastro, mas na hora de abrir a tela da erro.