2013-02-21 79 views
1

我的活动是一个登录页面。当用户点击时,如果凭据很好,则在数据库中执行asyncTask检查。在任务期间,我想显示ProgressDialog,但点击按钮后,它会保持按住5秒钟,然后我的ProgressDialog quiclky显示(小于1秒),然后出现Toast。调用AsynchTask.get时的Android UI线程块()

还有就是我的onClick功能:

Button connect = (Button)findViewById(R.id.connectButton); 
final EditText loginED = (EditText) findViewById(R.id.login); 
final EditText passwordED = (EditText) findViewById(R.id.password); 

connect.setOnClickListener(new View.OnClickListener(){ 

    @Override 
public void onClick(View arg0) { 

    String login = loginED.getText().toString(); 
    String password = passwordED.getText().toString(); 
    String[] params = {login, password}; 

    DoAsyncLogin doAsyncLogin = new DoAsyncLogin(); 
     try { 
     String result = doAsyncLogin.execute(params).get(); 
     Toast.makeText(MainActivity.this, result, Toast.LENGTH_LONG).show(); 
    } catch (InterruptedException e) { 
     e.printStackTrace(); 
    } catch (ExecutionException e) { 
     e.printStackTrace(); 
    } 
    } 
}); 

而且我的AsyncTask:

private class DoAsyncLogin extends AsyncTask<String, Void, String> 
{ 
ProgressDialog connectionProgressDialog = new ProgressDialog(MainActivity.this); 

@Override 
    protected String doInBackground(String... params) { 
    return getLoginData(params); 
} 

protected void onPreExecute(){ 

    connectionProgressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); 
    connectionProgressDialog.setMessage("Logging in..."); 
    connectionProgressDialog.show(); 
} 

protected void onPostExecute(String result) 
{ 
    connectionProgressDialog.dismiss(); 
} 
} 

任何想法?

谢谢!

回答

2

的问题是,你正在等待(阻塞)为AsynchTask完成其在主线程上执行(这使得它没用): 见AsynchTask本细则get方法这里AsynchTask.get()

相反,您应该使用onPostExcute回电来获得您的结果。

代码:

@Override 
public void onClick(View arg0) { 

    String login = loginED.getText().toString(); 
    String password = passwordED.getText().toString(); 
    String[] params = {login, password}; 

    DoAsyncLogin doAsyncLogin = new DoAsyncLogin(); 
    doAsyncLogin.execute(params); 
} 

,并在您asynchTask:

protected void onPostExecute(String result){ 
    connectionProgressDialog.dismiss(); 
    Toast.makeText(MainActivity.this, result, Toast.LENGTH_LONG).show(); 
}