Получение Невозможно создать обработчик внутри потока, который не вызвал Looper.prepare () с кодом, который работал на Android 4

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

12-27 12:57:57.908: W/dalvikvm(465): Exception Ljava/lang/RuntimeException; thrown while initializing Landroid/os/AsyncTask; 12-27 12:57:57.908: W/dalvikvm(465): threadid=9: thread exiting with uncaught exception (group=0x40014760) 12-27 12:57:57.927: E/AndroidRuntime(465): FATAL EXCEPTION: Thread-10 12-27 12:57:57.927: E/AndroidRuntime(465): java.lang.ExceptionInInitializerError 12-27 12:57:57.927: E/AndroidRuntime(465): at com.verious.baseballnews.NewsParser.fetchNews(NewsParser.java:137) 12-27 12:57:57.927: E/AndroidRuntime(465): at com.verious.baseballnews.MLBNews.getLeagueNews(MLBNews.java:145) 12-27 12:57:57.927: E/AndroidRuntime(465): at com.verious.baseballnewsreader.BaseballNewsReader.licenseCheckCompleted(BaseballNewsReader.java:45) 12-27 12:57:57.927: E/AndroidRuntime(465): at com.verious.lm.LicenseMgr.respondFromCache(LicenseMgr.java:218) 12-27 12:57:57.927: E/AndroidRuntime(465): at com.verious.lm.LicenseMgr.run(LicenseMgr.java:139) 12-27 12:57:57.927: E/AndroidRuntime(465): at java.lang.Thread.run(Thread.java:1020) 12-27 12:57:57.927: E/AndroidRuntime(465): Caused by: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare() 12-27 12:57:57.927: E/AndroidRuntime(465): at android.os.Handler.<init>(Handler.java:121) 12-27 12:57:57.927: E/AndroidRuntime(465): at android.os.AsyncTask$InternalHandler.<init>(AsyncTask.java:595) 12-27 12:57:57.927: E/AndroidRuntime(465): at android.os.AsyncTask$InternalHandler.<init>(AsyncTask.java:595) 12-27 12:57:57.927: E/AndroidRuntime(465): at android.os.AsyncTask.<clinit>(AsyncTask.java:184) 12-27 12:57:57.927: E/AndroidRuntime(465): ... 6 more 

У меня есть две загадки:

  1. Мой код работает с Android 4.0, но получил «Невозможно создать обработчик внутри потока, который не вызвал ошибку Looper.prepare» для всех более низких версий.
  2. Даже когда я опустошил вызов doInBackground (), он возвращает только «», я все еще получил ошибку.

Я пытаюсь получить некоторые новости из веб-службы с помощью AsyncTask и показать их в представлении. Вот мой базовый код:

 public class News { ... new FetchXML().execute(url); ... private class FetchXML extends AsyncTask<String,String,String> { protected String doInBackground(final String... urls) { String urlToOpen = urls[0]; URL url; String inputLine = null; String response = ""; URLConnection connection; try { String authStringEnc = b64encode("user:pass".getBytes()); url = new URL(urlToOpen); connection = url.openConnection(); connection.setRequestProperty("Authorization", "Basic " + authStringEnc); BufferedReader in = new BufferedReader( new InputStreamReader( connection.getInputStream())); while ((inputLine = in.readLine()) != null) { response += inputLine; } in.close(); } catch(MalformedURLException e) { // } catch(IOException e) { // } return response; } protected void onPostExecute(String result) { super.onPostExecute(result); NewsParser.this.parse(result); } } 

Метод newParser parse () анализирует xml и обновляет представление.

Здесь у меня полная потеря. Любая помощь будет оценена!

Благодаря!

Вы создаете экземпляр AsyncTask и выполняете его из фонового потока. Вы можете создавать и выполнять экземпляр AsyncTask из основного потока приложений.