まず、この例外の意味をよく知っていることを説明します。回答する場合は、質問をよくお読みください。
ネットワークスレッドでUI作業を行おうとすると、例外が発生することを私は知っています。AsyncTaskを使用していますが、UI操作を行っています。
これは、エラーがスローされているAsyncTaskコードのスニペットです。注apsとadmは、事前に宣言されています。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イベントとは見なされないと思います。それ以外は、私は途方に暮れています。私はこれに新しい目を向ける必要があります。さらに詳しく説明する必要がある場合はお知らせください。