Problemas do Android com o AsyncTask e o InputStream

Eu tenho tentado descobrir isso por conta própria por um bom tempo .. por tentativa / erro, bem como pesquisa, mas eu simplesmente não consigo entender isso. Eu sou muito ruim com conexões assíncronas e de rede e stuch, por isso pode ser algo simples que estou procurando. De qualquer forma ... vou colar algumas amostras de código relevantes e explicações.

Fundo rápido do meu problema. Estou trabalhando com a API Rotten Tomatoes para meu aplicativo e estou usando o GSON para analisar seus dados. Eu estava inicialmente segmentando 2.3, e isso funcionou bem. Então decidi ter suporte para o ICS e, é claro, corri para a "nenhuma operação de rede no thread da interface do usuário" - então comecei a me aprofundar no AsyncTask.

Aqui está o meu método InputStream:

private InputStream retrieveStream(String url) {

    DefaultHttpClient client = new DefaultHttpClient();

    HttpGet getRequest = new HttpGet(url);

    try {

        HttpResponse getResponse = client.execute(getRequest);
        final int statusCode = getResponse.getStatusLine().getStatusCode();

        if (statusCode != HttpStatus.SC_OK) {
            Log.w(getClass().getSimpleName(),
                    "Error " + statusCode + " for URL " + url);
            return null;
        }

        HttpEntity getResponseEntity = getResponse.getEntity();
        return getResponseEntity.getContent();
    }
    catch (IOException e) {
        getRequest.abort();
        Log.w(getClass().getSimpleName(), "Error for URL " + url, e);
    }

    return null;
}

Que estava funcionando bem na minha atividade principal, e agora está me dando problemas ao tentar "convertê-lo" em AsyncTask. Eu tenho chamado assim:

InputStream source = retrieveStream( url parameter );

Então eu tentei mover esse método para minha classe AsyncTask e chamá-lo assim:

private PerformMovieSearch performSearch = new PerformMovieSearch(this);
InputStream source = performSearch.retrieveStream(movieQueryUrl);

Mas isso não é suficiente, ainda recebo o erro sobre a realização de ações de rede na interface do usuário. O que eu preciso descobrir é como chamar 'retrieveStream' da AsyncTask, eu acho. Atualmente essa classe se parece com isso:

package net.neonlotus.ucritic;

[imports]

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

private final Context context;
private ProgressDialog progressDialog;


public PerformMovieSearch(Context context){
    this.context = context;
}


@Override
protected String doInBackground(String... urls) {
    retrieveStream(urls[0]);

    return null;

}

@Override
protected void onPreExecute() {
    progressDialog= ProgressDialog.show(context, "Please Wait","Searching movies", true);

}


@Override
protected void onPostExecute(String result) {
    super.onPostExecute(result);
    progressDialog.dismiss();

    MyActivity.mListAdapter.notifyDataSetChanged();
}

public InputStream retrieveStream(String url) {

    DefaultHttpClient client = new DefaultHttpClient();
    HttpGet getRequest = new HttpGet(url);

    try {
        HttpResponse getResponse = client.execute(getRequest);
        final int statusCode = getResponse.getStatusLine().getStatusCode();

        if (statusCode != HttpStatus.SC_OK) {
            Log.w(getClass().getSimpleName(),
                    "Error " + statusCode + " for URL " + url);
            return null;
        }

        HttpEntity getResponseEntity = getResponse.getEntity();
        return getResponseEntity.getContent();
    } catch (IOException e) {
        getRequest.abort();
        Log.w(getClass().getSimpleName(), "Error for URL " + url, e);
    }

    return null;
}

}

O "doinbackground" é o que precisa ser mudado ... mas não consigo encontrar uma maneira direta de fazer isso funcionar corretamente. Eu estava executando usando

new PerformMovieSearch(this).execute(movieQueryUrl);

Eu sei que é um monte de coisas, potencialmente confuso ... mas se alguém sabe como essencialmente fazer o método retrieveStream de forma assíncrona, isso seria ótimo. Como eu disse, tentei muitas coisas, fiz muita pesquisa, só não consegui fazer nada de útil.

questionAnswers(2)

yourAnswerToTheQuestion