我创建了一个简单的登录应用程序,它从sqlserver中获取用户名和密码。它可以正常工作......
我想在登录过程中使用asyntask显示一个progeress栏... 但我不知道在asyntask中使用参数...如果有一个plzz告诉我如何将我的方法放在asyntask的doInbackground中,我应该使用什么样的参数....
我的代码是; .....
public void save(){
initilize();
ResultSet rs = null;
String mylog=id.getText().toString();
String mypass=pass.getText().toString();
try{
Statement statement=connect.createStatement();
rs=statement.executeQuery("LOGIN '"+mylog+"', '"+mypass+"'");
}catch(Exception e){
e.printStackTrace();
}
if(mylog.equals("")||mypass.equals("")){
Toast.makeText(getApplicationContext(), "empty fields", Toast.LENGTH_SHORT).show();
} else
try {
if(rs.next()){
Intent i=new Intent(getApplicationContext(),Act2.class);
startActivity(i);
}
else if(rs.next()==false){
Toast.makeText(getApplicationContext(), "incorrect login", Toast.LENGTH_SHORT).show();
id.setText("");
pass.setText("");
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
如果有可能将同义方法save()保存在asyntask的doInbackground()中...
答案 0 :(得分:0)
进行快速重构(请注意,由于这是非常糟糕的做法和编码,因此您必须重构此代码以使其更具可维护性并避免重复):
public class MyAsyncTask extends AsyncTask<> {
私人活动活动; 布尔结果; private String myLog; private String myPass; 私人连接连接;
public MyAsyncTask(Activity activity, Connection connect) {
this.activity = activity;
this.connect = connect;
}
@Override
protected void onPreExecute() {
//show your progress dialog
}
@Override
protected Object doInBackground(Object[] objects) {
ResultSet rs = null;
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
initilize();
mylog=id.getText().toString();
mypass=pass.getText().toString();
}
});
try{
Statement statement=connect.createStatement();
rs=statement.executeQuery("LOGIN '"+mylog+"', '"+mypass+"'");
}catch(Exception e){
e.printStackTrace();
}
if(mylog.equals("")||mypass.equals("")){
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(activity.getApplicationContext(), "empty fields", Toast.LENGTH_SHORT).show();
}
});
} else
try {
if(rs.next()){
result = true;
}
else if(rs.next()==false){
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(activity.getApplicationContext(), "incorrect login", Toast.LENGTH_SHORT).show();
id.setText("");
pass.setText("");
}
});
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Object o) {
//hide your progress dialog
if(result == Boolean.TRUE){
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
Intent i=new Intent(activity.getApplicationContext(),Act2.class);
activity.startActivity(i);
}
});
}
}
}
然后在你的活动中你这样做:
MyAsyncTask a = new MyAsyncTask(this, connect); //im guessing "connect" is your Connection object
a.execute();
正如我所说的那样,我快速重构了代码,但是这里没有考虑最佳实践和良好的实现。
答案 1 :(得分:0)
也许,您可以使用计时器来检查您的身份 登录准备就绪。只要不是,就显示进度条。如果准备就绪,您可以关闭栏并开始新的活动或任何事情。运行的计时器可以在u UI线程上运行。 问候:)