2013-04-29 5 views
1

Я хочу показать диалог прогресса при загрузке некоторых данных с удаленного сервера:показать диалог прогресса при загрузке данных

Я использую следующую нить, чтобы получить данные, и это работает, но я не в состоянии показать индикатор выполнения деятельности:

public class Request { 

    public String text ; 
    public boolean downloadText(String urlStr) { 
     final String url = urlStr; 
     new Thread() { 
      public void run() { 
       int BUFFER_SIZE = 2000; 
       InputStream in = null; 
       Message msg = Message.obtain(); 
       msg.what=2; 
       try { 
        in = openHttpConnection(url); 

        InputStreamReader isr = new InputStreamReader(in); 
        int charRead; 
         text = ""; 
         char[] inputBuffer = new char[BUFFER_SIZE]; 

          while ((charRead = isr.read(inputBuffer))>0) 
          {      
           //---convert the chars to a String--- 
           String readString = 
            String.copyValueOf(inputBuffer, 0, charRead);      
           text += readString; 
           inputBuffer = new char[BUFFER_SIZE]; 
          } 
         Bundle b = new Bundle(); 
          b.putString("text", text); 
          msg.setData(b); 
          in.close(); 

       }catch (IOException e) { 
        e.printStackTrace(); 
       } 


      } 
     }.start(); 

    } 

не могли бы вы рассказать мне, как я могу это сделать!

+0

Прежде всего, где ваш код для ProgressDialog? Я не нашел его в приведенном выше коде. И если вы попросите реализовать в вышеуказанном классе, проверьте мой ответ. –

ответ

0

Создать Прогресс Диалог в AsyncTask

private class YourAsyncTask extends AsyncTask<Void, Void, Void> { 
    protected Void doInBackground(Void... args) { 
     // do background work here 
     return null; 
    } 

    protected void onPostExecute(Void result) { 
     // do UI work here 
    } 
} 
2

Использование progressDialog

final ProgressDialog progress=ProgressDialog.show(youractivity.this,"","message"); 
new Thread() 
    { 
    public void run() 
    { 
    try{ 
     youractivity.this.runOnUiThread(new Runnable(){ 
     @Override 
     public void run() { 
     // TODO Auto-generated method stub 
       // your code 
     } 
     }); 
    } 
    catch(Exception e) 
    { 
    } 
    progress.dismiss(); 
    } 
}.start() 

Кроме того, обратите внимание, что если вы хотите использовать Toast, вы должны использовать runOnUiThread

1

Если вы не хотите измените структуру своего кода, вы можете использовать runOnUiThread или Handler, чтобы показать и отменить диалог прогресса. Покажите это, когда первая строка метода run была исключена и отменила ее в блоке finally.

public void run() { 

    runOnUiThread(new Runnable() { 

     public void run(){ 
     // show progress dialog 
     } 

     }); 

    /// your code here 
    try { 




    } catch (IOException e) { 
    } finally { 
      runOnUiThread(new Runnable() { 

     public void run(){ 
     // dismiss progress dialog 
     } 

     }); 
    } 


} 
0
pDialog = ProgressDialog.show(context, null, "Loading...", true); 
    pDialog.setCancelable(false); 

    new Thread() { 
     public void run() { 

      // handle the exception somehow, or do nothing 

      // run code on the UI thread 

      runOnUiThread(new Runnable() { 

       @Override 
       public void run() { 

        try { 


           // do yor ui part here 
         } catch (Exception e) { 

         e.printStackTrace(); 
        } 

       } 
      }); 
     } 
    }.start(); 
3

создать класс, как показано ниже, и просто вызвать объект этого класса.

class MyTask extends AsyncTask<Void, Void, Void> { 

     ProgressDialog Asycdialog = new ProgressDialog(ActivityName.this); 

     @Override 
     protected void onPreExecute() { 

      super.onPreExecute(); 
      Asycdialog.setMessage("Loading..."); 
      Asycdialog.show(); 
     } 

     @Override 
     protected Void doInBackground(Void... arg0) { 

      // do the task you want to do. This will be executed in background. 
      return null; 
     } 

     @Override 
     protected void onPostExecute(Void result) { 

      super.onPostExecute(result); 
      Asycdialog.dismiss(); 
     } 
    } 
Смежные вопросы