Почему этот ProgressDailog не отображается? - PullRequest
0 голосов
/ 18 марта 2012

Вот мой код и пробелм.

static Throwable t= null;
static String responseFromServer = "";
static Activity a ; 
static Handler mHandler = new Handler();

public static String sendToServer(final Activity act, final String data)
{    
      progDailog =  ProgressDialog.show(act, "", " Please wait...", true);
      progDailog.setCancelable(true); //BUT this not displaying 

        Thread th =  new Thread()
         {
         public void run(){
              try{
                  // .........code ... SENDING data to server

                responseFromServer  = httpclient.execute(httppost, new BasicResponseHandler()).trim();  
                mHandler.post(showResponse);
                }
              catch (Exception e)
                {
                  t = e;
                  e.printStackTrace(); 
                   progDailog.dismiss();
                  mHandler.post(exception);
                 }  
                }
              };
             th.start();
             th.join();

     return responseFromServer;  
    }

     private static  Runnable showResponse = new Runnable()
   {  
    public void run(){
        Toast.makeText( a, responseFromServer, Toast.LENGTH_SHORT).show();
        progDailog.dismiss();
    }
    }; 

   private static  Runnable exception = new Runnable()
  {  
    public void run(){
        Toast.makeText( a, t + " ", Toast.LENGTH_SHORT).show();
        progDailog.dismiss();
    }
    }; 

Почему ProgressDialog не отображается?А где правильное место для его отображения?

Ответы [ 2 ]

1 голос
/ 18 марта 2012

progressDialog.show () может выполняться только из потока пользовательского интерфейса.просто сделайте следующее: вместо:

  progDailog =  ProgressDialog.show(act, "", " Please wait...", true);

используйте этот код:

  a.runOnUiThread(new Runnable() {

            @Override
            public void run() {
                progDailog =  ProgressDialog.show(act, "", " Please wait...", true);

            }
        });       

то же самое с методом dismiss ()

0 голосов
/ 18 марта 2012

Вы должны использовать AsyncTask помимо потоков. Пользовательский интерфейс может быть обработан только из потока пользовательского интерфейса. Вы не можете обрабатывать поток пользовательского интерфейса из других потоков.

Для получения дополнительной информации об этом, пожалуйста, прочитайте мой блог по ссылке ниже

http://pavandroid.blogspot.in/2010/09/how-to-create-calendar-in-android.html

...