Tecnologia do Blogger.
RSS

Re: [androidbrasil-dev] Re: ProgressDialog trabando emn AsyncTask

Veja, na AsyncTask o único método que roda em uma thread que não é a principal (UI) é o doInBackground. Então qualquer coisa que você for fazer em outros métodos que for realizar algum processamento mais carregado, corre o risco de dar algumas travadas.

Salve no banco dentro do doInBackgroud e deixa as respostas do processamento pro onPostExecute...

Eu organizaria ainda mais, utilizando o onPreExecute para mostrar o progress e o onPostExecute para fecha-lo e responder ao usuário o que aconteceu no processamento. Não vejo necessidade no Handler.

Se você ainda tiver dúvidas eu posso reescrever este código pra você de uma maneira que eu acho que ficaria melhor.

Em 17 de novembro de 2015 10:35, <kalinnaborges@gmail.com> escreveu:
Thiago,

Dessa forma, eu tenho que salvar no background tb e no onPostExecute chamar a outra AsyncTask?

É bem "aceito" salvar as coisas no doInBackground?

Em segunda-feira, 16 de novembro de 2015 14:08:34 UTC-3, Thiago escreveu:
O onPostExecute da AsyncTask já é executado na main thread. Me parece que você queria que ele estivesse sendo executado em background ainda (só isso pra explicar o porque tem um Handler junto com a AsyncTask).

Por isso está travando. O seu save no banco de dados está sendo feito na main thread.

2015-11-12 9:36 GMT-02:00 Leonardo Benedeti <leonardo...@gmail.com>:
Fala cara,

O google já mudou o modo de fazer requisições amigo. 
Recomendo que procure pela lib Volley, tem documentação dela no developer.android.com porem tem muitos exemplos otimos na internet já. Vale a pena mudar, ela é bem mais rapida que async task.
E também recomendo uso de progressBar, o widget mesmo. Tudo fica mais simples e com menos código. 

Espero ter ajudado. 

Abraço


Em quarta-feira, 11 de novembro de 2015 17:14:38 UTC-2, kalinn...@gmail.com escreveu:
Gente,

Sempre que eu vou receber dados do servidor via json, o progressDialog meio que trava no momento em que eu vou salvar esses dados no banco de dados (estou usando Active Android).

Alguém saberia me dizer como corrigir isso e fazer com que ele fique em execução?

*O processo de baixar e salvar funciona perfeitamente. O problema é só esse ProgressDialog que trava por um momento

public class LoginActivity extends AppCompatActivity implements View.OnClickListener, AsyncResponse{

    private ProgressDialog pd;
    private EditText etMatricula;
    private EditText etSenha;
    private Button btLogin;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.login_activity);
       
        iniciar_componentes();

    }

    private void iniciar_componentes() {
        etMatricula = (EditText) findViewById(R.id.et_matricula);
        etSenha = (EditText) findViewById(R.id.et_senha);
        btLogin = (Button) findViewById(R.id.bt_login);

        btLogin.setOnClickListener(this);       
   }

    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.bt_login:

                String matricula = etMatricula.getText().toString();
                String senha = etSenha.getText().toString();

                if(matricula.equals("") || senha.equals("")){
                    Util.showAlertDialog(LoginActivity.this, R.string.matricula_senha_empty);
                    return;
                }

                pd = new ProgressDialog(this);
                pd.setMessage(getResources().getString(R.string.login));
                pd.show();

                try {
                    JSONObject Jobject = new JSONObject();
                    Jobject.put("matricula", matricula);
                    Jobject.put("senha", senha);
                   
                    MinhaAsyncTask task = new MinhaAsyncTask(LoginActivity.this);
                    task.execute(Constants.LOGIN_URL, Jobject);

                }catch(Exception e){
                    Log.d(Constants.TAG, e.getMessage(), e.getCause());
                }
                break;
        }
    }

    public Handler handler = new Handler() {

        public void handleMessage(android.os.Message msg) {
            if ((pd != null) && (pd.isShowing()))
                pd.dismiss();
            switch (msg.what) {
                case Constants.LOGIN_OK:
                    startActivity(new Intent(LoginActivity.this, HomeActivity.class));
                    finish();
                    break;
                case Constants.LOGIN_FAIL:
                    Util.showAlertDialog(LoginActivity.this, R.string.login_fail);
                    break;               
            }
        };

    };

    @Override
    public void processFinish(String output) {
        if (output != null) {
                try {
                    JSONObject Jobject = new JSONObject(output);
                    String result_login = Jobject.getString("result");
                    if (result_login.equalsIgnoreCase("OK")) {
                        JSONArray Jarray = Jobject.getJSONArray("servicos");
                        for (int i = 0; i < Jarray.length(); i++) {
                            Servicos servico = new Servicos();
                            servico.id =  Jarray.getJSONObject(i).getInt("id");
                            servico.descricao = Jarray.getJSONObject(i).getInt("descricao"); 
                            servico.save();
                        }                       
                       
handler.sendEmptyMessage(Constants.LOGIN_OK);                

                    } else {
                       
handler.sendEmptyMessage(Constants.LOGIN_FAIL);
                    }
                }
catch (Exception e) {
                   
handler.sendEmptyMessage(Constants.LOGIN_FAIL);
              }

        }
else {
           
handler.sendEmptyMessage(Constants.LOGIN_FAIL);
        }
    }

}

public class MinhaAsyncTask extends AsyncTask {

private AsyncResponse response;

public MinhaAsyncTask(AsyncResponse response){
this.response = response;
}

@Override
protected Object doInBackground(Object[] params) {
HttpCore core = new HttpCore();
try {
return core.doPostRequest(params[0].toString(), params[1].toString());

}catch(ConnectException e){
return Constants.CONNECTION_ERRO;
}catch(Exception e){
Log.d(Constants.TAG, e.getMessage(), e.getCause());
}

return null;
}

@Override
protected void onPostExecute(Object o) {
super.onPostExecute(o);
try {
response.processFinish(o.toString());
}catch(Exception e){
response.processFinish(null);
}
}
}


--
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.



--
Thiago Moura
Software Engineer
+55 (11) 9 8178 1763

--
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-dev+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.



--
Caio Sérgio Bedeschi D'Almeida

--
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-dev+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

  • Digg
  • Del.icio.us
  • StumbleUpon
  • Reddit
  • RSS

0 comentários:

Postar um comentário