2012-05-18 5 views
0

Прежде всего, позвольте мне объяснить, что я хорошо осведомлен о том, что означает это исключение, пожалуйста, внимательно прочитайте вопрос, если вы собираетесь ответить.Невозможно создать обработчик внутри потока, который не вызвал исключение looper.prepare

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

Вот отрывок из AsyncTask кода, где ошибка бросают ПРИМЕЧАНИЕ APs и адм объявляются заранее ИТС инициализации Extracter, что исключение бросают:

do{ 
      try{ 

       HttpPost request = new HttpPost(params[0]); 
       request.setHeader("Accept", "application/json"); 
       request.setHeader("Content-type", "application/json"); 
       aps.setLastSent(lastSent); 
       StringEntity filterEntity = new StringEntity(aps.TempParameter()); //Remember this TempParameter is temporary function 
       request.setEntity(filterEntity); 
       response = httpClient.execute(request); 
       StatusLine statusLine = response.getStatusLine(); 
       if(statusLine.getStatusCode() == HttpStatus.SC_OK){ 
        Extracter extracter = new Extracter(response); 
        lastSent = extracter.extractLastSent(); 
        adm.addDictionary(extracter.extractDictionary()); 
       } 
      } catch (ClientProtocolException e) { 
       //TODO Handle problems.. 
       builder.append("Client protocol exception"); 
      } catch (IOException e) { 
       //TODO Handle problems.. 
       builder.append(e.toString()); 
      } 
     }while(lastSent != "done"); 

      return adm.getAlarmObjectList(); 

Линия

Extracter extracter = new Extracter(response); 

, где исключение исключено. Вот код класса Extracter:

public class Extracter extends AlarmLoopTestActivity { 



private JSONObject jo; 
private JSONArray ja; 

public Extracter(HttpResponse response){ 
    StringBuilder builder = new StringBuilder(); 
    HttpEntity entity = response.getEntity(); 
    try { 
     InputStream content = entity.getContent(); 
     BufferedReader reader = new BufferedReader(new InputStreamReader(content)); 
     String line; 
     while((line = reader.readLine())!= null){ 
      builder.append(line); 
     } 
    } catch (IllegalStateException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    String json = builder.toString(); 
    try { 
     jo = (JSONObject) new JSONTokener(json).nextValue(); 
     ja = jo.getJSONArray("effectNamesDict"); 
    } catch (JSONException e) { 
     jo = null; 
     e.printStackTrace(); 
    } 

} 

Я предполагаю, что printingStackTrace не считается событием UI. В таком случае я в недоумении. Мне нужно получить новые взгляды на это. Дайте мне знать, если мне нужно что-то уточнить.

+2

Что такое 'AlarmLoopTestActivity'? Другими словами, что он «расширяет» изначально? – Squonk

+0

Возможно, это не должно распространяться на это. – SmashCode

+0

Но, чтобы ответить на ваш вопрос, AlarmLoopTestActivity - это основное действие, а не рабочий поток, я исправляю его прямо сейчас, и я уверен, что это так. Не могу поверить, что я этого не замечал. – SmashCode

ответ

0

Ваш Extracter распространяется на класс AlarmLoopTestActivity, исходящий от имени это андроидная активность, и поэтому у нее, вероятно, есть некоторые методы взаимодействия с UI!

+0

Интерфейс пользовательского интерфейса не является проблемой. Попытка создать экземпляр 'Activity' с использованием' new' является серьезной проблемой. Как указывает OP в комментариях, в любом случае он не должен распространять этот класс. – Squonk

+0

@MisterSquonk Да, так это его проблема в том, что активность создавалась на не-ui-потоке – Blundell

Смежные вопросы

 Смежные вопросы