RuntimeException: не удается создать обработчик внутри потока, который не вызвал Looper.prepare () - PullRequest
0 голосов
/ 21 декабря 2011

У меня есть код с ASyncTask, и проблема в том, что, когда я выполняю его несколько раз, он падает с исключением: RuntimeException: только один Looper может быть создан для потока

Но тогда яПрочитайте это: https://stackoverflow.com/a/7781280/869180 и я вспомнил, что у меня была похожая ошибка в прошлом, и она была связана с пользовательским интерфейсом (в моем случае с ProgressDialog), созданным в ASyncTask.

Итак, я взялотключил все элементы пользовательского интерфейса из ASyncTask, и я также удалил Looper.prepare, чтобы избежать этого RuntimeException, но знаю, что я получаю следующее:

12-21 00:34:17.363: W/System.err(18658): java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
12-21 00:34:17.371: W/System.err(18658):    at android.os.Handler.<init>(Handler.java:121)
12-21 00:34:17.371: W/System.err(18658):    at android.app.Activity.<init>(Activity.java:683)
12-21 00:34:17.371: W/System.err(18658):    at com.konex.Alaves.Parser.<init>(Parser.java:29)
12-21 00:34:17.371: W/System.err(18658):    at com.konex.Alaves.News$LoadNews.doInBackground(News.java:131)

Вот код:

private class LoadNews extends AsyncTask<String, Void, Void> 
{
    private List<Noticia> data = new ArrayList<Noticia>();

    @Override
    protected void onPreExecute() {
        m_dialog.show();
    }

    @Override
    protected Void doInBackground(String... url) {
        try {

//          Looper.myLooper();
//          Looper.prepare();
            Parser parser = new Parser(url[0], url[1]);
            data = parser.run();

           } catch (Exception e) { 
               e.printStackTrace();
           }
        return null;
    }

@Override
    protected void onPostExecute(Void result) {

            m_dialog.dismiss();

        if(data !=null )                
            showNewContent(data);
    }
}

Я уверен, что что-то упустил или делаю что-то плохое, но я нигде не могу его найти.

Большое спасибо

Ответы [ 2 ]

2 голосов
/ 21 декабря 2011

Как показывает трассировка стека, ваша проблема возникает из строки 29 Parser.java в инициализаторах Parser. Вы заметите, что это не исходный код, который вы включили здесь, а для LoadNews.

На основании предыдущей строки трассировки стека, либо:

  • Parser наследуется от Activity

  • Parser пытается создать экземпляр Activity

Ни то, ни другое невозможно.

0 голосов
/ 21 декабря 2011

Может быть, создать экземпляр Parser вне класса LoadNews и передать ссылку на него?

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