Получение «ФАТАЛЬНОЕ ИСКЛЮЧЕНИЕ: AsyncTask # 2».И я не знаю, что вызывает это - PullRequest
1 голос
/ 10 февраля 2012

При попытке вызвать веб-сервис и получить соответствующий объект json я получаю фатальное исключение.Я абсолютно не знаю, где искать и какие ошибки исправить.

[Screendump of the exception in question](http://i.imgur.com/EZcbW.png)

РЕДАКТИРОВАТЬ:

    private class CallServiceTask extends AsyncTask<Object, Void, JSONObject>
{

    protected JSONObject doInBackground(Object... params) 
    {
        HttpGet req = (HttpGet) params[0];
        String url = (String) params[1];

        return executeRequest(req, url);
    }
}

А вот метод executeRequestвызывается в doInBackground:

    private JSONObject executeRequest(HttpGet request, String url)
{
    HttpClient client = new DefaultHttpClient();
    JSONObject jsonObj = null;
    client = getNewHttpClient();

    HttpResponse httpResponse;

    try {
        httpResponse = client.execute(request);

        HttpEntity entity = httpResponse.getEntity();

        if (entity != null) {

            InputStream instream = entity.getContent();
            String response = convertStreamToString(instream);
            try {
                jsonObj = new JSONObject(response);
            } catch (JSONException e1) {
                e1.printStackTrace();
            }

            // Closing the input stream will trigger connection release
            instream.close();
        }

    } catch (ClientProtocolException e)  {
        client.getConnectionManager().shutdown();
        e.printStackTrace();
    } catch (IOException e) {
        client.getConnectionManager().shutdown();
        e.printStackTrace();
    }
    return jsonObj;
}

Ответы [ 2 ]

3 голосов
/ 10 февраля 2012

Просто взглянув на трассировку стека LogCat (в данном случае), вы узнаете все, что вам нужно знать о том, что это исключение и что его вызвало:

поток, выходящий с необработанным исключением

Сообщает вам, что было сгенерировано исключение, которое ваш код не обрабатывает

Произошла ошибка при выполнении doInBackground ()

Это говорит о том, что ваша функция doInBackground () в вашей задаче Async вызвала это необработанное исключение

Вызвано: java.lang.ClassCastException ... HttpPost ... (RestClient.java:275)

И это говорит о том, что вы столкнулись с ClassCastException, возникшим в результате вызова HttpPost в строке 275 в этом исходном файле.

EDIT:

Должен был бы прочитать эту трассировку стека более тщательно ... поскольку HandlerExploit опубликовал Это HttpPost выдает эту ошибку, где вы ожидаете HttpGet ... но следующий метод отладки все еще остается:

Если вы добавите дополнительный улов (ClassCastException e) с помощью e.getMessage (), вы, скорее всего, увидите полезное сообщение об ошибке, которое более подробно описывает проблему.

Когда в этой ситуации я нахожу неожиданное исключение, подобное этому, я стремлюсь добавить временное 'catch all' (catch (Exception e) {e.printStackTrace ()}) и прикрепить точку прерывания к e. printStackTrace (), чтобы я мог видеть все подробности об исключении ... возможно, это не самый эффективный способ сделать это, но это начало, когда вы находитесь в темноте!

0 голосов
/ 10 февраля 2012

Моим лучшим предположением будет то, что:

HttpGet req = (HttpGet) params[0];

возвращает HttpPost вместо HttpGet.

Пожалуйста, напишите, куда вы звоните new CallServiceTask().execute();

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...