NunoDinis Posted October 15, 2012 at 04:01 PM Report #479233 Posted October 15, 2012 at 04:01 PM (edited) Boa tarde, Estou com uma dificuldade na utilização das threads. Quando tento chamar uma função dentro da mesma dá a seguinte mensagem: Only the original thread that created a view hierarchy can touch its views. public void Progress1_Click(View v) { mprogressDialog = ProgressDialog.show(login.this, "Aguarde", "A ler dados..."); new Thread() { public void run() { try{ CarregarCBOrdens(); // A TAL FUNÇÃO QUE QUERO CHAMAR } catch (Exception e) { Log.e("tag", e.getMessage()); } mprogressDialog.dismiss(); } }.start(); } Alguma sugestão ? Edited October 15, 2012 at 04:02 PM by NunoDinis Estranha forma de vida que tem a capacidade de transformar comandos em mensagens de erro. ndsotware.org
KTachyon Posted October 15, 2012 at 06:30 PM Report #479240 Posted October 15, 2012 at 06:30 PM Porque é que queres criar a thread para correr uma função se estás a espetar um progressDialog na cara do utilizador que só vai desaparecer quando a função terminar ou der excepção? Não me parece que faça muito sentido. De qualquer forma, o problema estará dentro da função, logo, alguma coisa que lá estejas a fazer é que estará a causar o problema. “There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.” -- Tony Hoare
David Carpinteiro Posted October 15, 2012 at 08:20 PM Report #479257 Posted October 15, 2012 at 08:20 PM Boas, O erro que te está a dar é por causa de estares a tentar chamar um controlo (mprogressDialog) através de uma thread, que não a principal. Deverás usar em vez de Thread, AsyncTask. Tens aqui um exemplo: http://developer.android.com/reference/android/os/AsyncTask.html Espero que ajude. David
NunoDinis Posted October 16, 2012 at 10:50 AM Author Report #479317 Posted October 16, 2012 at 10:50 AM Obrigado aos dois pelas respostas. Já consegui com AsyncTask. Mas ainda dá um "problema". Quando carrega em procurar não aparece de imediato a progressDialog, só aparece depois de +/- 2segundos. O que será que estou a colocar mal ? private class LoadViewTask extends AsyncTask<Void, Integer, Void> { @Override protected void onPreExecute() { progressDialog = new ProgressDialog(Simple.this); progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); progressDialog.setTitle("A carregar..."); progressDialog.setMessage("A carregar dados, por favor aguarde..."); progressDialog.setCancelable(false); progressDialog.setIndeterminate(false); progressDialog.setMax(100); progressDialog.setProgress(0); progressDialog.show(); } @Override protected Void doInBackground(Void... params) { try { synchronized (this) { int counter = 0; while(counter <= 4) { this.wait(850); counter++; publishProgress(counter*25); } } DesaparecerTeclado(); } catch (InterruptedException e) { e.printStackTrace(); } return null; } @Override protected void onprogressUpdate(Integer... values) { progressDialog.setProgress(values[0]); } @Override protected void onPostExecute(Void result) { progressDialog.dismiss(); } } Aqui é onde chamo a Async: imgProcurar.setonclickListener(new View.onclickListener() { public void onclick(View v) { new LoadViewTask().execute(); try { CarregarCBOrdens(); carregarCbOperacoes(); DesaparecerTeclado(); } catch(Exception erro) { Log.i("erro", "erro = "+erro); } } }); Estranha forma de vida que tem a capacidade de transformar comandos em mensagens de erro. ndsotware.org
David Carpinteiro Posted October 16, 2012 at 03:53 PM Report #479368 Posted October 16, 2012 at 03:53 PM Boas, Penso que o problema esteja nas operações que tens a seguir ao execute. Experimenta colocá-las na asynctask, no método onPostExecute antes do dismiss do progressdialog. David
NunoDinis Posted October 17, 2012 at 08:34 AM Author Report #479450 Posted October 17, 2012 at 08:34 AM Funcionou 🙂 Porém agora depois de desaparecer demora 2segundos a preencher os campos. Mas deve ser da função. Obrigado! Estranha forma de vida que tem a capacidade de transformar comandos em mensagens de erro. ndsotware.org
David Carpinteiro Posted October 17, 2012 at 09:32 AM Report #479458 Posted October 17, 2012 at 09:32 AM De nada. David
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now