2014-05-08 111 views
0

我試圖發送POST方法到服務器後,用戶點擊確認按鈕,但點擊後,我得到的響應ProgressDialog仍在運行。安卓關閉AlertDialog後ProgressDialog

paymentSubmitBtn = (Button)findViewById(R.id.paymentSubmitBtn); 
paymentSubmitBtn.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View arg0) { 

       final String receiver = receiverMymoIdEdtTxt.getText().toString(); 
       runOnUiThread(new Runnable() { 
        public void run() { 
         AlertDialog.Builder builder = new AlertDialog.Builder(Payment.this); 
         builder.setTitle(R.string.message); 
         builder.setMessage("Transaction Details") 
           .setPositiveButton("Confirm", new DialogInterface.OnClickListener() { 
            public void onClick(DialogInterface dialog, int id) 
            { 
             ProgressDialog dialog = ProgressDialog.show(Payment.this, "", "Connect to server..." , true); 
             sendTransactionInfo(receiver); 
            } 
           }) 
           .setNegativeButton(android.R.string.no, new DialogInterface.OnClickListener() { 
            public void onClick(DialogInterface dialog, int which) { 
            } 
           });      
         AlertDialog alert = builder.create(); 
         alert.show();    
        } 
       }); 

      } 
     }); 

這是我用來發送POST方法並嘗試關閉ProgressDialog的函數。

protected void sendTransactionInfo(final String receiver) 
    { 
     Thread t = new Thread() { 

      public void run() { 
       Looper.prepare(); //For Preparing Message Pool for the child Thread 
       HttpClient client = new DefaultHttpClient(); 
       HttpConnectionParams.setConnectionTimeout(client.getParams(), 10000); 
       HttpResponse response; 

       String URL = baseURL + "/api-create-transaction"; 

       try { 
         HttpPost post = new HttpPost(URL); 

         List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(1); 
         nameValuePairs.add(new BasicNameValuePair("section", "API")); 

         nameValuePairs.add(new BasicNameValuePair("receiver", receiver));   

         post.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 

         response = client.execute(post); 

         if(response!=null) 
         { 
          String res = EntityUtils.toString(response.getEntity()); 

          final JSONObject result = new JSONObject(res); 

          String operation = result.getString("operation"); 

          if(operation.trim().equalsIgnoreCase("success")) 
          {        
           JSONObject data = result.getJSONObject("data"); 
          } 
          else if(operation.trim().equalsIgnoreCase("error")) 
          { 

           runOnUiThread(new Runnable() { 
            public void run() { 
             AlertDialog.Builder builder = new AlertDialog.Builder(Payment.this); 
             builder.setTitle(R.string.message); 
             try 
             { 
              builder.setMessage(result.getString("message")) 
                .setPositiveButton("OK", new DialogInterface.OnClickListener() { 
                 public void onClick(DialogInterface dialog, int id) { 
                  dialog.dismiss(); 
                 } 
                }); 
             } catch (JSONException e) { 

              e.printStackTrace(); 
             }      
             AlertDialog alert = builder.create(); 
             alert.show();    
            } 
           }); 
           Toast.makeText(getBaseContext(), result.getString("message") , Toast.LENGTH_LONG).show();       
          } 
          dialog.dismiss(); 
         } 

       } catch(final Exception e) { 

        runOnUiThread(new Runnable() { 
         public void run() { 
          AlertDialog.Builder builder = new AlertDialog.Builder(Payment.this); 
          builder.setTitle(R.string.message); 
          builder.setMessage(e.toString()) 
            .setPositiveButton("OK", new DialogInterface.OnClickListener() { 
             public void onClick(DialogInterface dialog, int id) { 
              dialog.dismiss(); 
             } 
            });      
          AlertDialog alert = builder.create(); 
          alert.show();    
         } 
        }); 

       } 

       Looper.loop(); 
      } 
     }; 
     t.start(); 
    } 
+1

我力完全得到烏拉圭回合問題... ü要到何時取消該對話框OK在對話框中按下? –

+0

不,我想取消對話框,當我得到服務器的響應 – Abutouq

+0

但你正在創建一個新的警報與點擊處理程序。有一個地方有一個全球性的對話對象。在點擊處理程序中聲明的dialoog在最後不可訪問。 – greenapps

回答

0

要麼將​​您的對話框對象傳遞給您的sendTransactionInfo()或使ProgressDialog對話框全局將是我的建議。它看起來可能是一個範圍問題(只是簡單地看你的代碼)。

+0

如果這是範圍問題,那麼會不會有編譯時錯誤? –

+0

我猜測它使用了DialogInterface對話框,這就是爲什麼它沒有關閉ProgressDialog。當另一個方法沒有被傳遞時它還可以訪問ProgressDialog對象,並且它對onClick是本地的嗎? – dan983

+0

我更改了DialogInterface參數的名稱後,問題得以解決。 – Abutouq

0

嗯試試這個一變

alert.dismiss(); 

但要global..the referene到AlertDialog