为什么AsyncTask会创建无限循环

时间:2014-09-11 21:20:39

标签: android mysql android-asynctask

我总是在StackoverFlow中找到我的问题的答案但不是这次,所以我想问它,我希望你可以帮助我,谢谢你,即使你没有。

我正在尝试使用mysql查询

Select * From `Table` 

并使用.get()从asynctask返回结果集的问题是,在asynctask尝试返回程序后执行查询并获取返回值时,循环无穷大, PS:当我使用其他查询时,例如“选择*来自Table其中something =其他东西”它完美无缺。

这里我的类DataBaseManager中的2个方法有2个参数:Conn类型连接和成员类型ResultSet

/* asynctask pour la connexion*/public void Selmem(String ...a){
final class Select_member extends AsyncTask<String, Integer, ResultSet> {

    @Override
    protected ResultSet doInBackground(String... params) {



        try {
            ResultSet member2;
            String myDriver = "com.mysql.jdbc.Driver";
            Class.forName(myDriver).newInstance();
            conn = DriverManager.getConnection(params[0], "root", "");

            if(params.length==6)
            member2=select_member(params[1],params[2],params[3],params[4],params[5]);
            else
            member2=select_member(params[1],params[2],params[3]);

            conn.close();
            return(member2);


        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            Log.i("printf","NOT SELECTED");
            return null;    
        }

        // TODO Auto-generated method stub

    }


}

try {
    if(a.length==6)
    member=new Select_member().execute(a[0],a[1],a[2],a[3],a[4],a[5]).get();
    else
    member=new Select_member().execute(a[0],a[1],a[2],a[3]).get();

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

}

public ResultSet select_member(String ...a){
    String sql;
    PreparedStatement prest;
    try {
    if(a.length==5)
        {
        sql="SELECT * FROM `"+a[0]+"` WHERE "+a[1]+" = '"+a[2]+"' and `"+a[3]+"` = '"+a[4]+"'";
        prest= conn.prepareStatement(sql);

        }
    else if (a[2].equals(""))
        {
        sql="SELECT * FROM `"+a[0]+"`";
        prest= conn.prepareStatement(sql);

        }
    else
        {
        sql="SELECT * FROM `"+a[0]+"` WHERE `"+a[1]+"` = '"+a[2]+"'";
        prest= conn.prepareStatement(sql);

        }

 prest= conn.prepareStatement(sql);
ResultSet member1;
member1 = prest.executeQuery();
ResultSet member2=member1;
if(member1.next())
return member2;
else
return null;



} catch (Exception e) {
     e.printStackTrace();
     return null;
     }

                            }

这是我调用我的类尝试从我的数据库中选择的地方,ps:程序甚至没有进入我的循环(所以我不认为我的循环是问题我使用调试器来查看是问题)

public class Deniere_Op extends ActionBarActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_deniere__op);
    Intent activite=getIntent();
    DataBaseManager base=new DataBaseManager();
    String login=activite.getExtras().getString("login");
    base.Selmem("jdbc:mysql://10.0.2.2:3306/db_app",login , "", "");
    if(base.member==null)
    {
        Toast.makeText(getApplicationContext(), "Aucune Transaction",Toast.LENGTH_LONG).show();
    }
    else
    {int i=0;
        do{i++;
        for(int j=1;j<=6;j++)
        {String concat=new String();
        concat=concat.valueOf(i)+concat.valueOf(j);
        String message;
        try {
            message = base.member.getString(j);
            String a="textview"+concat;
            int resID=getResources().getIdentifier(a, "id",getPackageName());           
            TextView text=(TextView) findViewById(resID);
            text.setText(message);
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }




        }
        try {
            base.member.next();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        }while(base.member!=null);
    }
}

我希望这可以让你理解我的问题并帮助你帮助我:D:D。

the logcat hope it will help

0 个答案:

没有答案