App is closing, while consuming webservice

Asked

Viewed 109 times

-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);
    }
}
  • 1

    What’s the mistake? Post the logcat.

  • Olá Ramara7 segue o log&#xA;&#xA;11-06 16:13:50.744 12945-12945/tictic.code.dnsystem.com.br E/AndroidRuntime: FATAL EXCEPTION: main&#xA;11-06 16:13:50.744 12945-12945/tictic.code.dnsystem.com.br E/AndroidRuntime: Process: tictic.code.dnsystem.com.br, PID: 12945&#xA;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

  • 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, thanks for the help I’ll make the changes and as soon as I finish warning if it worked.

  • 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(); }

  • 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.

Show 1 more comment

1 answer

2


Step 1:

Enter a check to see if there is an internet connection:

// Função para verificar existência de conexão com a internet
public boolean verificaConexao(Context classe) {
    boolean conectado = false;
    try {
        ConnectivityManager gerenciador = (ConnectivityManager) classe.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo informacao = gerenciador.getActiveNetworkInfo();
        if ((informacao != null) && (informacao.isConnectedOrConnecting()) && (informacao.isAvailable())) {
            conectado = true;
        }
    } catch (Exception erro) {
    }
    return conectado;
}

Step 2: Use the following code to connect and get the data:

public void enviarLogin(View v) {
String LOGIN_URL = "http://www.seuwebservice.com/suapagina.php";
//Exibe Loading
ProgressDialog progressBar;
progressBar = new ProgressDialog(this);
progressBar.setCancelable(false);
progressBar.setTitle("Aguarde");
progressBar.setMessage("Validando dados...");
progressBar.setProgressStyle(ProgressDialog.STYLE_SPINNER); 
progressBar.show();
final View view = v;    

Runnable runnable = new Runnable(){
    @Override
    public void run(){
        int SDK_INT = Build.VERSION.SDK_INT;
        if (SDK_INT > 8) {
            if (validaFormLogin()) { //chame a sua função pra validar os dados
                if (verificaConexao(Login.this)) { //No seu caso é MainActivity.this
                    try {
                        StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
                        StrictMode.setThreadPolicy(policy);
                        String botaoPressionado;

                        switch (view.getId()) { //qual botão foi selecionado (login ou cadastrar, caso haja)
                            case R.id.btnLogin:
                                botaoPressionado = "login";
                                break;
                            case R.id.btnCad:
                                botaoPressionado = "cadastrar";
                                break;
                            default:
                                botaoPressionado = "login";
                                break;
                        } 

                        EditText loginDigitado, senhaDigitada;
                        loginDigitado = (EditText) findViewById(R.id.usuario);
                        senhaDigitada = (EditText) findViewById(R.id.senha);

                        //início do HTTP POST // $usuario = $_POST['usuario']; $senha = $_POST['senha']; $metodo = $_POST['metodo'];
                        ArrayList<BasicNameValuePair> postParameters = new ArrayList<BasicNameValuePair>();
                        postParameters.add(new BasicNameValuePair("usuario", loginDigitado.getText().toString()));
                        postParameters.add(new BasicNameValuePair("senha", senhaDigitada.getText().toString()));
                        postParameters.add(new BasicNameValuePair("metodo", botaoPressionado));

                        String response;
                        response = CustomHttpClient.executeHttpPost(LOGIN_URL, postParameters);

                        if (!response.equals("loginERRO\n")) { //o retorno vem com um ENTER no final, então adicione \n
                            dadosValidados(response); //Login OK, finaliza em outro método, enviando o JSON retornado
                        } else {
                            alerta(3); //Mostra algum erro ao usuário
                        }
                        progressBar.dismiss(); //retira o loading da tela
                    } catch (Exception e) {
                        e.printStackTrace();
                        progressBar.dismiss();
                    }
                }else{ //sem internet
                    progressBar.dismiss();
                    alerta(1);
                }
            }else { //form não validado
                progressBar.dismiss();
                alerta(2);
            }
        }else{ 
            progressBar.dismiss();
            alerta(0);
        }
    }
};

new Thread(runnable).start();}

Browser other questions tagged

You are not signed in. Login or sign up in order to post.