2017-02-07 27 views
0

Я пытаюсь отобразить диалог прогресса при нажатии кнопки входа. Но диалог прогресса отображается только тогда, когда я заканчиваю мой метод onClick. И не начало. В методе signIn я делаю asynctask для доступа к серверу. Итак, все время занимает асинхронность, не отображается диалог выполнения. только когда конец метода onClick достигнут, отображается диалог выполнения .... Кто-то знает, что я делаю неправильно?Диалоговое окно Android Progress не отображается до конца метода onClick

public void onClick(View view) { 
      progressDialog = new ProgressDialog(SignIn.this); 
      progressDialog.setMessage("Sign in in progress"); 
      progressDialog.setTitle("Please wait"); 
      progressDialog.setCancelable(false); 
      progressDialog.setIndeterminate(true); 

      progressDialog.show(); 

      repSignIn = signIn(SignIn.this, etEmail.getText().toString(), etPassword.getText().toString()); 


      if(!repSignIn.hasError()) 
      { 
       Toast.makeText(getApplicationContext(), "Sign In successfully", Toast.LENGTH_SHORT).show(); 
       onBackPressed(); 
      } 
      else 
      { 
       Toast.makeText(getApplicationContext(), repSignIn.getErrorMessage(), Toast.LENGTH_SHORT).show(); 
      } 
      //progressDialog.cancel(); 
     } 

спасибо заранее

Надин

ответ

0

Вместо того, чтобы progressDialog в OnClick вам нужно поместить его в onPreExecute вашего AsyncTask и уволить его в onPostExecute.

Причина: AsyncTask использует рабочий поток, который будет асинхронным, и именно по этой причине progressDialog заканчивается раньше, чем ожидалось.

class MyAsyncTask extends AsyncTask<Void, Void, Void>{ 
    @Override 
    protected void onPreExecute() { 
     progressDialog.show(); 
    } 

    @Override 
    protected Void doInBackground(Void... params) { 
    // do your stuff 
    return null; 
    } 

    @Override 
    protected void onPostExecute(Void aVoid) { 
    progressDialog.dismiss(); 
    } 
} 
+0

Но асинститут находится внутри librairie (что я разрабатываю). Поэтому я не хочу помещать диалог прогресса в onProExecute ... Я хочу показать перед запуском asynctask ... – Banana

+0

есть ли обратный вызов из библиотеки, возвращает ли asyncTask что-нибудь? –

+0

В методе librairy я вызываю asynctask ans и жду результата. String result = new sendDataToServer(). Execute (url, "PUT", jsonData.toString()). Get(); Это проблема? – Banana

0

В методе асинхронной задачи переопределение onPreExecute() и у вас есть, чтобы отобразить индикатор ..

private void signIn(your parameters here) { 
     new AsyncTask<Void, Void, Void>(){ 

      @Override 
      protected void onPreExecute() { 
       super.onPreExecute(); 
       progressDialog = new ProgressDialog(SignIn.this); 
       progressDialog.setMessage("Sign in in progress"); 
       progressDialog.setTitle("Please wait"); 
       progressDialog.setCancelable(false); 
       progressDialog.setIndeterminate(true); 
       progressDialog.show(); 
      } 

      @Override 
      protected void doInBackground(Void... params) { 
       //your logic here 
      } 

      @Override 
      protected void onPostExecute(JSONObject response) { 
       super.onPostExecute(response); 
       progressDialog.dismiss(); 
      } 
      }.execute(); 
    } 

, что это помогает

0

Используйте ваш прогресс dailog в Asyntask. Инициализируйте и запустите диалог в onPreExecute и отмените диалог в onPostExecute. работает для меня,

@Override 
protected void onPreExecute() { 
    progress = new ProgressDialog(UpdateActivity.this); 
    progress.setCancelable(false); 
    progress.setMessage("Please wait data is Processing"); 
    progress.show(); 
} 
@Override 
protected void onPostExecute(Void aVoid) { 
    super.onPostExecute(aVoid); 
    progress.dismiss(); 

} 

 Смежные вопросы

  • Нет связанных вопросов^_^