android 上的 AsyncTask 和 ResultSet

AsyncTask and ResultSet on android

我在使用 AsyncTask 时遇到问题,这段代码工作正常,但是当我 return 一个 ResultSet 时,在 mainActivity 中我没有 AsyncTask 的结果,我的应用程序中断了。我尝试使用计时器和 Thread.sleep 但没有用

     blast_dbConnect task = new blast_dbConnect("asd","123",MainActivity.this);
    task.execute("Conectando",sql);
try {
        if(rs.next()==true && rs!=null){

            String passCheck;
            passCheck = rs.getString("password");
            Log.i("Se conecta",passCheck);
            tv3.setText(passCheck);


        /*catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        */
        /*if(passCheck.equals(password)){
            Log.i("Se conecta","Se conecta");
            return rs;
        }*/

        }
    } catch (SQLException e) {
            // TODO Auto-generated catch block
        e.printStackTrace();
    }

这是我的同步任务代码 rs 是一个结果集(我希望我的同步任务 return 是一个结果集。我的同步任务是这个

        public class blast_dbConnect extends AsyncTask<String,String,ResultSet> {
String username;
String password;
Context c;
ProgressDialog pd;
private String ipServidorMySQL = "jdbc:mysql://db4free.net:3306/cuetospalace";
private String contrasenaMySQL="636251630";
private String usuarioMySQL = "sdelcueto";


public blast_dbConnect(String user,String pass,Context context){
     username = user;
     password = pass;
     c = context;
}
@Override
protected void onPreExecute(){
    pd = new ProgressDialog(c);
    pd.setMessage("Conectando");
    pd.setCancelable(false);
    pd.show();

}
@Override
protected ResultSet doInBackground(String...params) {
    boolean login = false;
    String input = params[1];
    //publishProgress(input);
    try{
         try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        Connection conn;
        Class.forName("com.mysql.jdbc.Driver").newInstance();
        //conn = DriverManager.getConnection("jdbc:mysql://db4free.net:3306/cuetospalace","sdelcueto","636251630");
        conn =  (Connection)DriverManager.getConnection(ipServidorMySQL, usuarioMySQL, contrasenaMySQL);
        //Log.i("SQL",input);

        Statement stmt = conn.createStatement();
        //Log.i("Se conecta","Se conecta");
        ResultSet rs = stmt.executeQuery(input);
        /*if(rs.next()==true){


            String passCheck = rs.getString("password");

            return passCheck;
            /*if(passCheck.equals(password)){
                Log.i("Se conecta","Se conecta");
                return rs;
            }*/

        //}
        return rs;

    }
    catch(SQLException | InstantiationException | IllegalAccessException | ClassNotFoundException e){
        //Log.i("bla",e.getMessage());
        return null;
    }

}
@Override
protected void onProgressUpdate(String...params){
    //Log.i("onProgressUpdate","onProgressUpdate");
    pd.setMessage(params[0]);
}

protected void onPostExecute(ResultSet rs){

    //Log.i("onPostExecute","onPostExecute");
    MainActivity.rs=rs;
    if(pd != null)
        pd.dismiss();
    //pd.cancel();


}
protected void onCancelled (){
    //Log.i("onCancelled","onCancelled");
    cancel(true);
}

}' 我想让主线程等待 AsyncTask 完成,我也尝试 get 函数 谁能帮帮我?

如果你想让主线程等待 asyncTask ,那么为什么不在主线程中工作呢?

如果你想要,你可以 运行 一个 ProgressDialogonPreExecute() 中的 cancelable= false,然后在 onPostExecute() 中关闭该对话框。

class MyAsync extends AsyncTask<String, Void, String> {

    ProgressDialog progressDialog;

    @Override
    protected void onPreExecute() {
        // TODO Auto-generated method stub
        super.onPreExecute();
        progressDialog = new ProgressDialog(Activity.this);
        progressDialog.setMessage("please wait...");

        progressDialog.setCancelable(false);
        progressDialog.show();
    }

    @Override
    protected String doInBackground(String... params) {
         //background task
    }

    @Override
    protected void onPostExecute(String result) {
        super.onPostExecute(result);
        if(progressDialog != null)
            progressDialog.dismiss();

    }

}  

更新:
在您的代码中:

 public void onCreate(Bundle savedInstanceState){    
    blast_dbConnect task = new      blast_dbConnect("asd","123",MainActivity.this);
   task.execute("Conectando",sql);
 }

 public void useRS(ResultSet rs){
    this.rs = rs;
    try {
       if(rs!=null && rs.next()==true){

          String passCheck;
          passCheck = rs.getString("password");
          Log.i("Se conecta",passCheck);
          tv3.setText(passCheck);


         /*catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
         }
        */
       /*if(passCheck.equals(password)){
           Log.i("Se conecta","Se conecta");
           return rs;
       }*/

       }
    } catch (SQLException e) {
         // TODO Auto-generated catch block
        e.printStackTrace();
    }
 } 

在 onPostExecute() 中:

onPostExecute(ResultSet rs){
   if(pd!=null)
      pd.dismis();
   useRS(rs);
}