Minha sugestão seria quebrar seu código em 3 classes diferentes, para não ficar tudo embolado e separar as responsabilidades de cada uma:
Uma Activity deve ser responsável somente por controlar a tela e exibir coisas nela e não precisamos alterar o seu construtor, pois não somos responsáveis por dar new nela. Quem cuida disso é o Android.
Uma AsyncTask deve cuidar somente de tarefas assíncronas (como acesso ao webservice, por exemplo)
Usando essas duas dicas, fiz isso aqui:
A sua classe DBActivity na realidade não gerencia nada da tela, ela cuida apenas da conexão com seu webservice. Então tirei a herança,  deixei apenas a asynctask lá dentro e chamei de DBConector:
public class DBConector extends AsyncTask<String, Integer, String> {
    private final Map<String, String> dados;
    private final String url;
    private final Context ctx;
    public ProgressDialog progressDialog;
    public DBConector(Map<String, String> dados, String url, Context ctx) {
        this.dados = dados;
        this.url = url;
        this.ctx = ctx;
    }
    public void executa() {
        Log.i("PilatesOn", "instanciou o executor");
        this.execute();
    }
    @Override
    protected void onPreExecute() {
        progressDialog = new ProgressDialog(ctx);
        progressDialog.setMessage("Carregando...");
        progressDialog.show();
    }
    @Override
    protected String doInBackground(String... params) {
        HttpClient httpclient = new DefaultHttpClient();
        HttpPost httppost = new HttpPost(url);
        Log.i("Filtro", "instanciou a DB");
        String responseContent = null;
        try {
            // Add your data
            List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
            Set<String> chaves = dados.keySet();
            for (Iterator<String> iterator = chaves.iterator(); iterator.hasNext(); ) {
                String chave = iterator.next();
                if (chave != null) {
                    nameValuePairs.add(new BasicNameValuePair(chave, dados.get(chave)));
                }
            }
            httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
            Log.i("Filtro", "Fez a requisição post");
            // Execute HTTP Post Request
            HttpResponse response = httpclient.execute(httppost);
            if (response != null) {
                InputStream in = response.getEntity().getContent();
                responseContent = inputStreamToString(in);
                Log.i("Filtro", "Resultado " + responseContent);
            }
        } catch (ClientProtocolException e) {
            e.printStackTrace();
            Log.i("Filtro", "Ciente exception: " + e.getMessage());
        } catch (IOException e) {
            e.printStackTrace();
            Log.i("Filtro", "IOS exception: " + e.getMessage());
        }
        return responseContent;
    }
    @Override
    protected void onPostExecute(String result) {
        if (progressDialog != null) {
            progressDialog.dismiss();
        }
        // process the result
        super.onPostExecute(result);
    }
    private String inputStreamToString(InputStream is) throws IOException {
        String line = "";
        StringBuilder total = new StringBuilder();
        // Wrap a BufferedReader around the InputStream
        BufferedReader rd = new BufferedReader(new InputStreamReader(is));
        // Read response until the end
        while ((line = rd.readLine()) != null) {
            total.append(line);
        }
        // Return full string
        return total.toString();
    }
}
Como você tinha uma classe Login, mantive ela e fiz ela ser a responsável por instanciar esse DBConector:
public class Login implements View.OnClickListener {
    private final Map<String, String> dados;
    private final String url;
    private final Context ctx;
    public Login(Map<String, String> dados, String url, Context ctx) {
        this.dados = dados;
        this.url = url;
        this.ctx = ctx;
    }
    @Override
    public void onClick(View v) {
        DBConector db = new DBConector(dados, url, ctx);
        db.executa();
    }
}
E essa classe Login é chamada lá no clique do botão:
        Map<String, String> dados; //Você precisa passar isso aqui;
        String url; //Precisa popular essa variável também;
        Button login = (Button) findViewById(R.id.btn_login);
        login.setOnClickListener(new Login(dados, url, this));
Veja que o terceiro argumento do Login é o context.
Abraço.