Проблемы Android с AsyncTask и InputStream

Я пытался выяснить это самостоятельно довольно долгое время ... методом проб / ошибок, а также исследованиями, но я просто не могу понять это. Я довольно плохо разбираюсь с Async, сетевыми подключениями и стучами, так что это может быть что-то простое, что я пропускаю. В любом случае ... Я вставлю некоторые соответствующие примеры кода и объяснения.

Быстрый фон моей проблемы. Я работаю с Rotten Tomatoes API для моего приложения и использую GSON для анализа их данных. Я изначально был нацелен на 2.3, и это работало нормально. Затем я решил поддержать ICS и, конечно же, столкнулся с «отсутствием сетевой операции в потоке пользовательского интерфейса» - поэтому я начал вникать в AsyncTask.

Вот мой метод 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;
}

Который отлично работал в моей основной деятельности, и теперь вызывает проблемы при попытке «преобразовать» его в AsyncTask. Я назвал это так:

InputStream source = retrieveStream( url parameter );

Затем я попытался переместить этот метод в мой класс AsyncTask и вызвать его так:

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

Но это не значит, что вы получаете ошибку при выполнении сетевых действий в интерфейсе пользователя. Я должен выяснить, как вызвать 'retrieveStream' из AsyncTask. В настоящее время этот класс выглядит так:

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;
}

}

«Doinbackground» - это то, что нужно изменить ... но я не могу найти прямой способ заставить это работать должным образом. Я выполнял, используя

new PerformMovieSearch(this).execute(movieQueryUrl);

Я знаю, что это много вещей, которые могут сбить с толку ... но если кто-нибудь знает, как по существу выполнять метод retrieveStream асинхронно, это было бы здорово. Как я уже говорил, я много чего перепробовал, много исследовал, просто не смог придумать ничего полезного.

Ответы на вопрос(2)

Ваш ответ на вопрос