Прежде всего, позвольте мне объяснить, что я хорошо осведомлен о том, что означает это исключение, пожалуйста, внимательно прочитайте вопрос, если вы собираетесь ответить.Невозможно создать обработчик внутри потока, который не вызвал исключение 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. В таком случае я в недоумении. Мне нужно получить новые взгляды на это. Дайте мне знать, если мне нужно что-то уточнить.
Что такое 'AlarmLoopTestActivity'? Другими словами, что он «расширяет» изначально? – Squonk
Возможно, это не должно распространяться на это. – SmashCode
Но, чтобы ответить на ваш вопрос, AlarmLoopTestActivity - это основное действие, а не рабочий поток, я исправляю его прямо сейчас, и я уверен, что это так. Не могу поверить, что я этого не замечал. – SmashCode