2012-06-11 16 views
6

Mam okno dialogowe alertu w mojej aplikacji do uwierzytelniania logowania. Podczas wysyłania żądania chcę pokazać pasek postępu i chcą odwołać jeśli odpowiedź jest success.please mi pomóc jeśli ktoś knows.Iam stosując poniższy kod:
pokazujący pasek postępu w oknie dialogowym alertu

final AlertDialog.Builder alert = new AlertDialog.Builder(this); 
LinearLayout login = new LinearLayout(this); 
TextView tvUserName = new TextView(this); 
TextView tvPassword = new TextView(this); 
TextView tvURL = new TextView(this); 
final EditText etUserName = new EditText(this); 
final EditText etPassword = new EditText(this); 
final EditText etURL = new EditText(this); 
login.setOrientation(1); // 1 is for vertical orientation 
tvUserName.setText(getResources().getString(R.string.username)); 
tvPassword.setText(getResources().getString(R.string.password)); 
tvURL.setText("SiteURL"); 
login.addView(tvURL); 
login.addView(etURL); 
login.addView(tvUserName); 
login.addView(etUserName); 
login.addView(tvPassword); 
etPassword.setInputType(InputType.TYPE_CLASS_TEXT 
| InputType.TYPE_TEXT_VARIATION_PASSWORD); 
login.addView(etPassword); 
alert.setView(login); 
alert.setTitle(getResources().getString(R.string.login)); 
alert.setCancelable(true); 
alert.setPositiveButton(getResources().getString(R.string.login), 
new DialogInterface.OnClickListener() { 
    public void onClick(final DialogInterface dialog, 
    int whichButton) { 
     strhwdXml = etURL.getText().toString(); 
     strUserName = etUserName.getText().toString(); 
     XmlUtil.username = strUserName; 
     strPassword = etPassword.getText().toString(); 
     if ((strUserName.length() == 0) 
     && (strPassword.length() == 0) 
     && (strhwdXml.length() == 0)) { 
      Toast.makeText(
      getBaseContext(), 
      getResources().getString(
      R.string.userPassword), 
      Toast.LENGTH_SHORT).show(); 
      onStart(); 
      } else { 
      final SharedPreferences prefs = PreferenceManager 
      .getDefaultSharedPreferences(getApplicationContext()); 
      SharedPreferences.Editor prefsEditor = prefs 
      .edit(); 
      try { 
       StringBuffer inStreamBuf = new StringBuffer(); 
       inStreamBuf = XmlUtil 
       .getLoginAuthResponse(strUserName, 
       strPassword, strhwdXml); 
       strXmlResponse = inStreamBuf.toString(); 
       Log.e("Response:", strXmlResponse); 
       String parsedXML = ParseResponse(strXmlResponse); 
       if (parsedXML 
       .equalsIgnoreCase(getResources() 
       .getString(R.string.success))) { 
       } 
+0

Użyj Asynchronous Task dla tego, http://droidapp.co.uk/?p=177 – Aerrow

+0

może być łatwiej, jeśli chcesz zdefiniować swój układ w xml – jiduvah

+0

jak mogę to zrobić ... proszę pomóż mi jiduvah –

Odpowiedz

24

To może być łatwiejsze do korzystania z tego

ProgressDialog dialog = ProgressDialog.show(MyActivity.this, "", 
         "Loading. Please wait...", true); 

Możesz przeczytać więcej o dialogach postępu here

Aby anulować byłoby

dialog.dismiss(); 
+0

jak go anulować, jeśli odpowiedź uwierzytelniająca jest sukcesem?!? –

+0

zaktualizowałem dla ciebie – jiduvah

+0

, który otworzyłby nowe okno dialogowe, nie? Czy to pożądany efekt? Możesz także dodać progressdialog do samego okna dialogowego – MikeIsrael

1

Spróbuj poniżej kodu

private class DownloadingProgressTask extends 
     AsyncTask<String, Void, Boolean> { 

    private ProgressDialog dialog = new ProgressDialog(ShowDescription.this); 

    /** progress dialog to show user that the backup is processing. */ 

    /** application context. */ 

    protected void onPreExecute() { 
     this.dialog.setMessage("Please wait"); 
     this.dialog.show(); 
    } 

    protected Boolean doInBackground(final String... args) { 
     try { 
      // write your request code here 


      **StringBuffer inStreamBuf = new StringBuffer(); 
      inStreamBuf = XmlUtil 
      .getLoginAuthResponse(strUserName, 
      strPassword, strhwdXml); 
      strXmlResponse = inStreamBuf.toString(); 
      Log.e("Response:", strXmlResponse); 
      String parsedXML = ParseResponse(strXmlResponse); 
      if (parsedXML 
      .equalsIgnoreCase(getResources() 
      .getString(R.string.success))) {** 

       return true; 
     } catch (Exception e) { 
      Log.e("tag", "error", e); 
      return false; 
     } 
    } 

    @Override 
    protected void onPostExecute(final Boolean success) { 

     if (dialog.isShowing()) { 
      dialog.dismiss(); 
     } 

     if (success) { 
      Toast.makeText(ShowDescription.this, 
        "File successfully downloaded", Toast.LENGTH_LONG) 
        .show(); 
      imgDownload.setVisibility(8); 
     } else { 
      Toast.makeText(ShowDescription.this, "Error", Toast.LENGTH_LONG) 
        .show(); 
     } 
    } 

} 

i nazywają to w zdarzeniu onclick

new DownloadingProgressTask().execute(); 
+0

można edytować mój kod i powiedzieć, jak zaimplementować go w mojej aplikacji –

+0

Mam edytowany kod. proszę sprawdzić – Nirali

4

Jeśli chcesz pasek postępu, aby pokazać, spróbuj wykonać następujące kroki, a także można skopiować i wkleić cały kod do odpowiednią część twojego kodu i powinna działać.

//the first thing you need to to is to initialize the progressDialog Class like this 

final ProgressDialog progressBarDialog= new ProgressDialog(this); 

//set the icon, title and progress style.. 

progressBarDialog.setIcon(R.drawable.ic_launcher); 

progressBarDialog.setTitle("Showing progress..."); 

progressBarDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); 


    //setting the OK Button 
    progressBarDialog.setButton(DialogInterface.BUTTON_POSITIVE, "OK", new DialogInterface.OnClickListener(){ 
     public void onClick(DialogInterface dialog, 
       int whichButton){ 
      Toast.makeText(getBaseContext(), 
        "OK clicked!", Toast.LENGTH_SHORT).show(); 
     } 
    }); 

    //set the Cancel button 
    progressBarDialog.setButton(DialogInterface.BUTTON_NEGATIVE, "Cancel", new DialogInterface.OnClickListener(){ 
     public void onClick(DialogInterface dialog, int whichButton){ 
      Toast.makeText(getApplicationContext(), "Cancel clicked", Toast.LENGTH_SHORT).show(); 
     } 
    }); 
//initialize the dialog.. 
progressBarDialog.setProgress(0); 

//setup a thread for long running processes 
new Thread(new Runnable(){ 
    public void run(){ 
     for (int i=0; i<=15; i++){ 
      try{ 
       Thread.sleep(1000); 
       progressBarDialog.incrementProgressBy((int)(5)); 
      } 
      catch(InterruptedException e){ 
       e.printStackTrace(); 
      } 
     } 
     //dismiss the dialog 
     progressBarDialog.dismiss(); 
    } 
    }); 

//show the dialog 
progressBarDialog.show(); 

Przycisk Anuluj powinien zamknąć okno dialogowe.

+0

Po prostu dodaj .start() po utworzeniu wątku. – jelic98

Powiązane problemy