Andriod не показывает диалоговое окно процесса, пока вызов идет на сервер

Я новичок в том, чтобы задавать здесь вопросы, поэтому любые советы по этому поводу будут оценены... но к моей проблеме: enter code here

Я пытаюсь показать диалог процесса во время ожидания данных с сервера. Я использую вызов модификации для получения данных с сервера и использования шаблона MVP в нашем проекте. Но отображается черный экран, пока вызов идет на сервер. Получение ответа Я застрял в этой точке несколько дней..

   public class ReceiptRegisterActivity extends AppCompatActivity   implements ReceiptRegisterPresenter.ReceiptRegisterPresenterListener {

@Override
protected void onCreate(Bundle savedInstanceState) {
     setContentView(R.layout.activity_receipt_register);
        progressBar = new ProgressDialog(ReceiptRegisterActivity.this);

        progressBar.setCancelable(true);
        progressBar.setMessage("Fetching Data...");
        progressBar.setProgress(20);
        progressBar.setProgressStyle(ProgressDialog.STYLE_SPINNER);
        progressBar.show();
        progressBarStatus = 0;
spinner = (SearchableSpinner)findViewById(R.id.spinner);
        editsearch = (android.widget.SearchView) findViewById(R.id.search);
        editsearch.setOnQueryTextListener(this);
        expandButton =(Button)findViewById(R.id.expandButton);
        byDate =(Button)findViewById(R.id.byDate);
        byCustomer=(Button)findViewById(R.id.byCustomer);
        byDate.setFocusable(false);
        allEventLIstener();
dbHelperObj=new DBHelper(this);
        try{
            dbHelperObj.createDB();
        }catch (Exception e){
            throw new  Error(e);
        }
        try{
            dbHelperObj.openDataBase();

        }catch (SQLiteException e){
            e.printStackTrace();
        }
        //srActivity = this;
        // progressBar = new ProgressBar(this);
        //   progressBar.setVisibility(View.VISIBLE);

       receptRegisterPresenterObj =  new ReceiptRegisterPresenter(this,this);
        receptRegisterPresenterObj.getReceiptRegisterData();
}
 public void receiptRegisterDataReady(Object obj) {


       /// Getting Response In This Block Doing Some Manupilation And Dismiss progressBar...      
        progressBar.dismiss();

    }`

Спасибо за любую помощь


person Sagar Khurd    schedule 25.02.2017    source источник
comment
Хоть и встроенный в onCreate, экран там фактически не отображается. onCreate ставит в очередь действия, которые нужно завершить позже. Вы должны позволить onCreate закончить как можно скорее. Переместите любую длительную обработку на другой обратный вызов жизненного цикла, такой как onResume, и не зависайте в onCreate. Не уверен, что это ваша проблема, но я надеюсь, что это поможет.   -  person Cheticamp    schedule 01.03.2017


Ответы (1)


Вы делаете слишком много работы в основном потоке OnCreate. Вот почему он замораживает ваше приложение для Android.

Сделайте свой пользовательский интерфейс Progress в основном потоке следующим образом:

 @Override
protected void onCreate(Bundle savedInstanceState) {
     setContentView(R.layout.activity_receipt_register);

   progressBar = new ProgressDialog(this, "title", "loading");

    heavywork();

}

   public void heavywork()
{

//start a new thread to process job
     new Thread(new Runnable() {  
         @Override  
         public void run() { 
             // Do all the Data From Server code here ! 
          }  
      }).start();

}

Это может вам помочь: ProgressDialog в отдельном потоке

person Johnathan Logan    schedule 03.03.2017