2010-12-06 5 views
1

Когда я нажимаю кнопку входа в систему, на веб-сервисе вызывается вызов веб-службы. Мне нужно отобразить диалог выполнения и после получения веб-сервиса вернуть намерение на следующую страницу ... но он всегда дублирует пустая страница, когда умысел называется также диалог прогресса не показываетРеализация темы

if(Utility.isNetworkAvailable(currActivity)){     
// Utility.showProgressDialog(currActivity); 
          new Thread() { 
           @Override 
           public void run() {        
            currActivity.runOnUiThread(new Runnable() { 
             @Override 
             public void run() { 
              Intent intent = new Intent(Login.this, Listviewer.class); 
              startActivity(intent); 
              tempSplashTread = new Thread() { // Thread for showing wait cursor 
               @Override 
               public void run() { 
                currActivity.runOnUiThread(new Runnable() { 
                 @Override 
                 public void run() { 
                  myProgressDialog = new ProgressDialog(InfraSignPdfList.this);  
                  myProgressDialog.setMessage("Loading...     "); 
                  myProgressDialog.show(); 
                 } 
                }); 
               } 
              }; 
              tempSplashTread.start(); 
              finish(); 
             } 
            }); 
           } 
          }.start(); 
         }else { 
          Utility.noNetworkDialog(currActivity);       
         } 
+3

Пожалуйста, отформатируйте свой код, чтобы его можно было прочитать. –

ответ

2

Плохая идея - установить диалог прогресса между запускающими приложениями. Вам необходимо реализовать диалог прогресса в том, который выполняет загрузку, а затем отобразить следующее действие после того, как загруженные данные были переданы новому действию.

Выполните следующие шаги:

1.After Войти вызов запуска Кнопки сервера для получения данных от сервера до тех пор отображения progressDialog о текущей деятельности.

2. После того, как данные были загружены, начните следующее действие, передав необходимые ему данные.

2

Вы должны сделать это с помощью AsyncTask (умный фоном нити) и ProgressDialog

AsyncTask позволяет правильное и простое использование потока пользовательского интерфейса , Этот класс позволяет выполнять фоновые операции и публиковать результаты в потоке пользовательского интерфейса без необходимости манипулировать потоками и/или обработчиками.

Асинхронная задача определяется вычислением, которое выполняется на фоновом потоке и результат которого публикуется в потоке пользовательского интерфейса. Асинхронная задача определяется тремя универсальными типами, называемыми Params, Progress и Result, и 4 шагами, называемыми begin, doInBackground, processProgress и end.

4 шаги

Когда асинхронная задача выполняется, задача проходит через 4 этапа:

onPreExecute(), вызываемых в потоке пользовательского интерфейса сразу же после того, как задача выполняется. Этот шаг обычно используется для настройки задачи, например, показывая индикатор выполнения в пользовательском интерфейсе.

doInBackground(Params...), вызывается в фоновом режиме сразу после onPreExecute() завершает выполнение. Этот шаг используется для выполнения фоновых вычислений, которые могут занять много времени. Параметры асинхронной задачи передаются на этот шаг. Результат вычисления должен быть возвращен этим шагом и будет возвращен на последний шаг. Этот шаг также может использовать publishProgress (Progress ...) для публикации одного или нескольких единиц прогресса. Эти значения публикуются в потоке пользовательского интерфейса на этапе onProgressUpdate (Progress ...).

onProgressUpdate(Progress...), вызывается в потоке пользовательского интерфейса после вызова publishProgress (Progress ...). Время выполнения не определено. Этот метод используется для отображения любой формы прогресса в пользовательском интерфейсе, пока фоновое вычисление все еще выполняется. Например, его можно использовать для анимации индикатора выполнения или отображения журналов в текстовом поле.

onPostExecute(Result), вызывается в потоке пользовательского интерфейса после завершения вычисления фона. Результат вычисления фона передается на этот шаг в качестве параметра. многопоточность правила

Есть несколько правил, пронизывающих, которые необходимо соблюдать для этого класса, чтобы работать должным образом:

Экземпляр задачи должен быть создан в потоке пользовательского интерфейса. execute (Params ...) должен быть вызван в потоке пользовательского интерфейса. Не вызывайте onPreExecute(), onPostExecute (Result), doInBackground (Params ...), onProgressUpdate (Прогресс ...) вручную. задача может быть выполнена только один раз (исключение будет сгенерировано, если второе исполнение попытка.)

Пример кода
Что адаптер делает в этом примере не важно, что более важно, чтобы понять, что вам нужно для использования AsyncTask для отображения диалога прогресса.

private class PrepareAdapter1 extends AsyncTask<Void,Void,ContactsListCursorAdapter > { 
    ProgressDialog dialog; 
    @Override 
    protected void onPreExecute() { 
     dialog = new ProgressDialog(viewContacts.this); 
     dialog.setMessage(getString(R.string.please_wait_while_loading)); 
     dialog.setIndeterminate(true); 
     dialog.setCancelable(false); 
     dialog.show(); 
    } 
    /* (non-Javadoc) 
    * @see android.os.AsyncTask#doInBackground(Params[]) 
    */ 
    @Override 
    protected ContactsListCursorAdapter doInBackground(Void... params) { 
     cur1 = objItem.getContacts(); 
     startManagingCursor(cur1); 

     adapter1 = new ContactsListCursorAdapter (viewContacts.this, 
       R.layout.contact_for_listitem, cur1, new String[] {}, new int[] {}); 

     return adapter1; 
    } 

    protected void onPostExecute(ContactsListCursorAdapter result) { 
     list.setAdapter(result); 
     dialog.dismiss(); 
    } 
} 
+0

Я попробую taht – xydev

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