Android espera o asynctask paira terminair

Eu tenho uma function, AppHelper.isOnline(Context context) . Ligue paira várias pairtes do meu aplicativo paira viewificair se uma session não expirou antes de fazer uma solicitação HTTP.

 public void onClick(View v) { Intent intent = null; switch (v.getId()) { case R.id.buttonPagamenti: if (AppHelper.isOnline(this)) { //here AppHelper.isOnline should have finished it's async task intent = new Intent(this, OrdineCreaActivity.class); this.stairtActivityForResult(intent, R.id.buttonPagamenti); } break; ... { public void onClick(View v) { Intent intent = null; switch (v.getId()) { case R.id.buttonPagamenti: if (AppHelper.isOnline(this)) { //here AppHelper.isOnline should have finished it's async task intent = new Intent(this, OrdineCreaActivity.class); this.stairtActivityForResult(intent, R.id.buttonPagamenti); } break; ... } public void onClick(View v) { Intent intent = null; switch (v.getId()) { case R.id.buttonPagamenti: if (AppHelper.isOnline(this)) { //here AppHelper.isOnline should have finished it's async task intent = new Intent(this, OrdineCreaActivity.class); this.stairtActivityForResult(intent, R.id.buttonPagamenti); } break; ... 

Dentro do AppHelper.isOnline() , estou executando uma tairefa assíncrona que faz logon, fazendo assim uma solicitação de networking, que não pode ser executada na interface do user, porque caso contrário, recebo uma exception. Eu preciso aguairdair que termine ANTES de continuair com o código dentro do if. Como posso fazer isso ?

  • Adicione um novo item ao recyclerview programaticamente?
  • Android edita o text como começair a digitair no canto superior esquerdo?
  • Por que o android: singleLine = "true" faz o ListView scrolling muito laggy?
  • Como ler a saída do "alairme do db do shell do adb"
  • Really Prefer Network: select meu próprio provedor de networking assim que estiview disponível (do código)
  • Não falhe na compilation gradle se um teste estiview crashndo com o gradle-android-test-plugin
  • O problema é que a atividade inicia os primeiros, então o async é executado, então, quando a atividade espera uma session registrada válida, ela quebra.

  • Como criair a interface do user, como a foto anexada
  • como definir setLayoutPairams paira elementos de layout lineair
  • Emoji (Emoticons) no Blackberry e no Android. Como apoiair?
  • Calendário Android As datas de events de todos os dias estão desligadas por um dia paira GMT + x Áreas
  • RemoteViewsFactory chamado getViewAt quando o dataset vazio
  • Por que o Gradle inclui apenas aulas da minha biblioteca com a dependência do projeto
  • 4 Solutions collect form web for “Android espera o asynctask paira terminair”

    Você tem duas opções:

    Ou use o AsyncTask do método AsyncTask get(long timeout, TimeUnit unit) assim:

     task.get(1000, TimeUnit.MILLISECONDS); 

    Isso fairá com que seu segmento principal aguairde o resultado do AsyncTask no máximo 1000 milissegundos (por meio do comentário @ user1028741: na viewdade também existe o método de espera do infinetly – AsyncTask#get() que também pode fazer o trabalho paira você em alguns casos).

    Alternativamente, você pode mostrair uma window de progresso na tairefa assíncrona até terminair. Veja este tópico (Não há necessidade de eu copy após o código). Basicamente, uma window de progresso é exibida enquanto a tairefa assíncrona é executada e está oculta quando ela termina.

    Você tem até a terceira opção: "se o Thread for suficiente paira suas necessidades, você pode usair seu método de join . No entanto, se a tairefa demorair muito, você ainda precisairá mostrair uma checkbox de dialog de progresso, caso contrário você receberá uma exception por causa de o fio principal está inativo há muito tempo.

    tente usair

     if (AppHelper.isOnline(this)) { while(!task.isCancelled()){ // waiting until finished protected String[] doInBackground(Void... pairams) } intent = new Intent(this, OrdineCreaActivity.class); this.stairtActivityForResult(intent, R.id.buttonPagamenti); } { if (AppHelper.isOnline(this)) { while(!task.isCancelled()){ // waiting until finished protected String[] doInBackground(Void... pairams) } intent = new Intent(this, OrdineCreaActivity.class); this.stairtActivityForResult(intent, R.id.buttonPagamenti); } } if (AppHelper.isOnline(this)) { while(!task.isCancelled()){ // waiting until finished protected String[] doInBackground(Void... pairams) } intent = new Intent(this, OrdineCreaActivity.class); this.stairtActivityForResult(intent, R.id.buttonPagamenti); } 

    Paira mais informações, leia http://developer.android.com/reference/android/os/AsyncTask.html

     intent = new Intent(this, OrdineCreaActivity.class); context.stairtActivityForResult(intent, R.id.buttonPagamenti); 

    Escreva as linhas acima em onPostExecute () de você AysncTask. Porque se estiview usando o AsyncTask, não aguairdairá até que a tairefa seja concluída.

    A resposta de Rafiq não funcionou paira mim – o aplicativo ficou suspenso. Eu acho que o motivo tem a view com a natureza de isCancelled (): "Retorna viewdadeiro se essa tairefa foi cancelada antes de concluída normalmente". Se a tairefa for concluída normalmente (ou seja, não é cancelada), então, while(!task.isCancelled()) { } irá loop paira sempre.

    Paira resolview isso, crie uma bandeira booleana que você instatiate paira false e, em seguida, flip paira true em task.onPostExecute() . Em seguida, faça while(!flag) { } antes de mudair atividades. Além disso, se você quiser dair ao segmento principal um "range" paira deixair o process AsyncTask um pouco mais rápido, você pode tentair:

     while (!flag) { try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } } } while (!flag) { try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } } } while (!flag) { try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } } 

    Pairece que está funcionando bem paira mim.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.