2013-05-06 2 views
0

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

Thread th = new Thread(){ 
     public void run() { 

        try { 
         sleep(5000); 

         while(cnt < 5000){ 
          activty.this.runOnUiThread(new Runnable(){ 
           public void run() 
           { 
            ProgressBar pd = (ProgressBar)findViewById(R.id.progressBar1); 
            pd.setVisibility(0); 
            pd.setMax(100); 

            pd.setProgress(cnt); 
            cnt += 100; 
           } 
          }); 
         } 
        } catch (InterruptedException e) { 
          // TODO Auto-generated catch block 
          e.printStackTrace(); 
         } 
     } 

     int cnt = 100; 
    }; 
    th.start(); 
    ` 
+0

Вы проверили xml ?, возможно, другие виды не оставили места достаточно для панели прогресса. – Daniel

+0

Хороший глаз там тоже, я мог упустить это. – kabuto178

ответ

2

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

В примере Processes and Threads Guide приведен пример использования AsyncTask.

+0

Есть ли способ сделать общий класс асинтез, или я должен сделать один для каждой сетевой активности, которую я должен выполнить в своей деятельности. – kabuto178

+1

@ kabuto178 Попробуйте это http://stackoverflow.com/questions/14253421/how-one-interface-can-be-used-for-different-background-android-tasks/14376233#14376233, вы можете изменить код в doInBackground на основе вашего запроса, т. е. получить или отправить – Pragnani

+0

@ kabuto178. 'DoInBackground' AsyncTask' может принимать параметры, например, если только разница в файле, который вам нужно загрузить, вы можете передать это в свою AsyncTask и повторно использовать его: ' new NetworkAsyncTask(). execute (urlToDownload) 'например – ianhanniballake

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