不同活动中的AsyncTask类?

时间:2015-03-30 10:42:19

标签: android mysql class

可以在不同的类中使用连接类(AsyncTask)吗?

例如,我在MainActivity中有以下代码,但我想在不同的活动中使用它,我如何将它用作辅助线程?:

public class Connect extends AsyncTask<String, Void, String> {

    String resultadoConexion;

    @Override
    protected String doInBackground(String... urls) {

        Connection conn;
                       try {

                            Class.forName("com.mysql.jdbc.Driver");
                            conn = DriverManager.getConnection("jdbc:mysql://XXXXXXXXXX?user=XXXX&password=XXXX");
                            Log.i("Exito","Conexion a la base de datos realizada con exito");

                           resultadoConexion = "Conectado";
                        }

                        catch (Exception e)
{
                            resultadoConexion = "Error al conectar";
                            Log.i("ErrorBBDD", "Error: " + e.getMessage());
                            e.printStackTrace();
                        }
        return resultadoConexion;
    }

    //Metodo que ejecuta la tarea del hilo
    public void Conectar() {
        Connect task = new Connect();
        task.execute();
    }

    //Creamos el metodo setText para poder asignar dentro del hilo secundario
    private void setText(final TextView text, final String value)
    {
        runOnUiThread(new Runnable(){
            @Override public void run(){
                text.setText(value);
            }
        });
    }

}

1 个答案:

答案 0 :(得分:1)

将内联类放在单独的类文件中并重复使用。

ConnectAsyncTask.class

public class ConnectAsyncTask extends AsyncTask<String, Void, String> {

    String resultadoConexion;

    @Override
    protected String doInBackground(String... urls) {

        Connection conn;
                       try {

                            Class.forName("com.mysql.jdbc.Driver");
                            conn = DriverManager.getConnection("jdbc:mysql://XXXXXXXXXX?user=XXXX&password=XXXX");
                            Log.i("Exito","Conexion a la base de datos realizada con exito");

                           resultadoConexion = "Conectado";
                        }

                        catch (Exception e)
{
                            resultadoConexion = "Error al conectar";
                            Log.i("ErrorBBDD", "Error: " + e.getMessage());
                            e.printStackTrace();
                        }
        return resultadoConexion;
    }

    //Metodo que ejecuta la tarea del hilo
    public void Conectar() {
        Connect task = new Connect();
        task.execute();
    }

    //Creamos el metodo setText para poder asignar dentro del hilo secundario
    private void setText(final TextView text, final String value)
    {
        runOnUiThread(new Runnable(){
            @Override public void run(){
                text.setText(value);
            }
        });
    }

然后在任何你想要的地方使用它:

MyActivity1:

import package...ConnectAsyncTask;
public void onCreate(Bundle savedinstance) {
  new ConnectAsyncTask().execute(url);
}

MyActivity2:

import package...ConnectAsyncTask;
public void onCreate(Bundle savedinstance) {
  new ConnectAsyncTask().execute(url);
}

或直接重用您活动的内部类。例如,您的活动名称是MyActivity,那么您可以获得连接任务的实例,如下所示:

new MyActivity.Connect()