-2
I have a problem in my application, when consuming a web service in Json, the application is closing.
The idea of my application is I consume this web service to validate my email and password, and returning a Json with my user data(email, name and surname), I am recent in Android programming.
I’d like you to help me.
This code from Mainactivity.java
public class MainActivity extends AppCompatActivity {
//Variaveis que serão utilizadas para ligar Java com XML
private EditText et_email;
private EditText et_senha;
private TextView tv_esqueci_senha;
private Button btn_registrar;
private Button btn_acessar;
private ProgressDialog progressDialog;
private Context mContext;
private String logAutenticacao;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.telalogin);
//Modificando o título da Activity tela de login
setTitle(getString(R.string.telalogin_titulo_activity));
//Métodos base
inicializaVariavel();
inicializaAcao();
}
//Inicializando as variaveis
private void inicializaVariavel() {
//Inicializando o context
mContext = getBaseContext();
//Edit Text
et_email = (EditText) findViewById(R.id.telalogin_et_email);
et_senha = (EditText) findViewById(R.id.telalogin_et_senha);
//Buttons
btn_registrar = (Button) findViewById(R.id.telalogin_btn_registrar);
btn_acessar = (Button) findViewById(R.id.telalogin_btn_acessar_conta);
//TextView
tv_esqueci_senha = (TextView) findViewById(R.id.telalogin_tv_esqueci_senha);
}
//Método responsavel pelas ações da activity telalogin
private void inicializaAcao() {
//Ação do botão Registrar
btn_registrar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//Criando uma intent e atribuindo a classe tela de registro do usuário
//Encerrando a activity de login
Intent mIntent = new Intent(mContext, TelaRegistrarUsuario.class);
startActivity(mIntent);
finish();
}
});
//Método do botão acessar
btn_acessar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//Verifica se os campos estão preenchidos
if (validaCampos()) {
//Criando intent e atribuindo a clase Tela Principal
//Encerrando a activity Tela de Login
Intent mIntent = new Intent(mContext, TelaPrincipal.class);
startActivity(mIntent);
finish();
}
}
});
//Método do TextView esqueci minha senha
tv_esqueci_senha.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//Criando intent e atribuindo a clase Tela Esqueci Senha
//Encerrando a activity da Tela de Login
Intent mIntent = new Intent(mContext, TelaEsqueciSenha.class);
startActivity(mIntent);
finish();
}
});
}
//Método de validação dos campos da activity
private boolean validaCampos() {
//Resgatando os valores que estão nos edittext
String email = et_email.getText().toString().trim();
String senha = et_senha.getText().toString().trim();
//Verifica se o campo email esta vazio
if (email.length() == 0){
et_email.setError(getString(R.string.telalogin_mgserro_et_email_campo_vazio));
return false;
}else{
//Verifica se o email digitado esta no formato correto
if(!Funcoes.validaEmail(email)){
et_email.setError(getString(R.string.telalogin_msgerro_et_email_email_formato_incorreto));
return false;
}
}
//Verifica se o campo senha esta vazio
if (senha.length() == 0){
et_senha.setError(getString(R.string.telalogin_msgerro_et_senha_campo_vazio));
return false;
}
//Aqui deve ser realizado uma consulta no WebService e os
//dados ser comparados
//Executa o método de sincronização/Autenticação
new SincronizaUsuario().execute();
//
if (logAutenticacao.equals("Erro")){
Toast.makeText(mContext, R.string.telalogin_msgerro_emailesenha_incorretos,
Toast.LENGTH_LONG).show();
return false;
}
return true;
}
private class SincronizaUsuario extends AsyncTask<Void, Integer, Void>{
//
String email = et_email.getText().toString().trim();
String senha = ToolBox.md5(et_senha.getText().toString().trim());//Converte senha em MD5
String funcao = "f15112012";
@Override
protected void onPreExecute() {
//Exibe um mensage de dialogo para usuário
//notificando que os dados estão sendo validados no webservice
progressDialog = new ProgressDialog(MainActivity.this);
progressDialog.setCancelable(false);//Não pode cancelar a dialog
progressDialog.setTitle("Autenticação"); //Titulo
progressDialog.setMessage("Aguarde seus dados estão sendo validados no servidor!"); //Mensagem
//Exibe dialog
progressDialog.show();
}
@Override
protected Void doInBackground(Void... params) {
//
try{
//Cria e inicializa um objeto Gson
Gson gsonUsuario = new Gson();
//
Transmissao_Env transmissao_env = new Transmissao_Env();
transmissao_env.setEmail(email);
transmissao_env.setSenha(senha);
transmissao_env.setFuncao(funcao);
//
String resultado = ToolBox.comunicacao("http://192.168.0.8/wstictic/index.php", gsonUsuario.toJson(transmissao_env));
//
String parRes[] = resultado.split("#WSTAG#");
//
switch (parRes.length) {
case 2:
if (parRes[0].equals("0")) {
//
Transmissao_Rec rec = gsonUsuario.fromJson(parRes[1], Transmissao_Rec.class);
//
logAutenticacao = "Sucesso";
} else {
//
logAutenticacao = "Erro";
}
break;
default:
//
logAutenticacao = "Erro";
break;
}
}catch (Exception e){
String erro = e.toString();
}finally {
}
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
//
progressDialog.dismiss();
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
// if (id == R.id.action_settings) {
// return true;
// }
return super.onOptionsItemSelected(item);
}
}
What’s the mistake? Post the logcat.
– ramaral
Olá Ramara7 segue o log

11-06 16:13:50.744 12945-12945/tictic.code.dnsystem.com.br E/AndroidRuntime: FATAL EXCEPTION: main
11-06 16:13:50.744 12945-12945/tictic.code.dnsystem.com.br E/AndroidRuntime: Process: tictic.code.dnsystem.com.br, PID: 12945
11-06 16:13:50.744 12945-12945/tictic.code.dnsystem.com.br E/Androidruntime: java.lang.Nullpointerexception: Attempt to invoke virtual method 'Boolean java.lang.String.equals(java.lang.Object)' on a null Object Reference
– dnsfirmino
You are trying the equals method using the logAutentication variable, but it is null as it has not yet been initialized. Asynctask performs the operation in the background and returns later, that is, you are trying to compare before Asynctask returns. You could perform the comparison in Asynctask Onpostexecute or invoke an application method from it.
– Alisson
Alisson, thanks for the help I’ll make the changes and as soon as I finish warning if it worked.
– dnsfirmino
Alisson made the changes as you said and worked, but I’m not able to perform the comparisons in the onPostExecute method. @Override protected void onPostExecute(Void avoid) { super.onPostExecute(avoid); //Checking the webservice log if(logWs.equals("0") ){ //Creating Input and assigning the class Main Screen //Ending Activity Login Screen Intent mIntent = new Intent(mContext, Telaprincipal.class); startActivity(mIntent); Finish(); }
– dnsfirmino
Alisson was able to solve the problem on the line where I was converting the result of Json into an object, After this conversion I assign the value 0 to the error control variable Ws changed the order before converting I assign the value 0 to the control variable and it worked. I will test a few times as yet, as I don’t believe the error was in the sequence. But thank you so much for your help.
– dnsfirmino