2012-03-30 39 views
0

ProgressDialog的onClick不工作..這是我的代碼..基本上我想顯示加載對話框,當用戶提交登錄表單,並等待響應ProgressDialog的onClick不工作

public class LoginLayout extends MenuActivity { 
ProgressDialog progress; 
EditText un,pw; 
TextView error; 
Button ok; 
/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.login); 
    un=(EditText)findViewById(R.id.et_un); 
    pw=(EditText)findViewById(R.id.et_pw); 
    ok=(Button)findViewById(R.id.btn_login); 
    error=(TextView)findViewById(R.id.tv_error); 

    ok.setOnClickListener(new View.OnClickListener() { 

     @Override 

     public void onClick(View v) { 
       progress = ProgressDialog.show(LoginLayout.this, "Login","please...wait",true); 

      ArrayList<NameValuePair> postParameters = new ArrayList<NameValuePair>(); 
      postParameters.add(new BasicNameValuePair("username", un.getText().toString())); 
      postParameters.add(new BasicNameValuePair("password", pw.getText().toString())); 

      String response = null; 
      try { 

       response = CustomHttpClient.executeHttpPost("http://www.mysite.com/api/login.php", postParameters); 
       String res=response.toString(); 
       res= res.replaceAll("\\s+",""); 
       progress.dismiss(); 

     if(res.equals("1")) 
        error.setText("Correct Username or Password"); 
       else 
        error.setText("Sorry!! Incorrect Username or Password"); 
      } catch (Exception e) { 
       un.setText(e.toString()); 
      } 

     } 
    }); 
} 

}

+0

progress.show( ); after progress = ProgressDialog.show(LoginLayout.this,「Login」,「please ... wait」,true); 。你應該使用這個線程http://stackoverflow.com/questions/8149349/progress-dialog-on-button-click-in-android/8149536#8149536 – Sameer 2012-03-30 07:59:45

回答

1

你必須使用Hanlders或AsyncTask。這裏有很多關於這方面的問題。嘗試按照下面的代碼片段,

在你的onCreate()

 Handler handler; 
handler = new Handler() { 
    @Override 
    public void handleMessage(Message msg) { 
     if (msg.what == 0) { 
    Pdialog.dismiss();  

if(res.equals("1")) 
       error.setText("Correct Username or Password"); 
      else 
       error.setText("Sorry!! Incorrect Username or Password"); 
    } 
    }; 

做到這一點,現在使用一個線程將文件上傳到服務器。修改這段代碼,

public class Activity001 extends Activity 
{ 

ok.setOnClickListener(new View.OnClickListener() { 
    public void onClick(View view) 
    { 
    ProgressDialog progressDialog = ProgressDialog.show(Activity001.this, "", "wait ", true, false); 
Thread ProgressThread = new Thread() { 
       @Override 
       public void run() { 
        try { 

ArrayList<NameValuePair> postParameters = new ArrayList<NameValuePair>(); 
      postParameters.add(new BasicNameValuePair("username", un.getText().toString())); 
      postParameters.add(new BasicNameValuePair("password", pw.getText().toString())); 

      String response = null; 
      try { 

       response =   CustomHttpClient.executeHttpPost("http://www.mysite.com/api/login.php", postParameters); 
       String res=response.toString(); 
       res= res.replaceAll("\\s+",""); 


         } catch(InterruptedException e) { 
          // do nothing 
         } finally { 

           handler.sendEmptyMessage(0); 
         } 
        } 
       }; 

        ProgressThread.start(); 


      } }; 

    } 

如果沒有去的AsyncTask,

這裏有幾個環節,

http://www.vogella.de/articles/AndroidPerformance/article.html

http://labs.makemachine.net/2010/05/android-asynctask-example/

http://developer.android.com/reference/android/os/AsyncTask.html