0
AsyncTask를 확장하는 FetchTaskList라는 클래스를 UI 스레드 내에서 만들었습니다. 서버 소켓을 사용 중이며 소켓의 입력 스트림에서 읽으려고합니다. 디버깅 할 때 while 루프가 완료된 후 doInBackground가 중지되므로 onPostExecute는 호출되지 않습니다. 왜 이런 일이 일어나는 걸까요? 나는 TaskListActivity.javaAsyncTask doInBackground가 중지됨 ... 예외가 발생하지 않았습니다.
private class FetchTaskList extends AsyncTask<Void, Void, JSONArray> {
@Override
protected JSONArray doInBackground(Void... params)
{
JSONArray jArray = new JSONArray();
try
{
socket = new Socket(DEFAULT_HOST, DEFAULT_PORT);
Scanner scanner = new Scanner(socket.getInputStream());
PrintStream out = new PrintStream(socket.getOutputStream());
while(scanner.hasNext())
{
JSONObject json = new JSONObject(scanner.nextLine());
jArray.put(json);
}
return jArray;
}
catch (UnknownHostException e)
{
e.printStackTrace();
Log.e("YOUR_APP_LOG_TAG", "I got an error", e);
} catch (IOException e)
{
e.printStackTrace();
Log.e("YOUR_APP_LOG_TAG", "I got an error", e);
}
catch (JSONException e)
{
e.printStackTrace();
Log.e("YOUR_APP_LOG_TAG", "I got an error", e);
}
return jArray;
}
@Override
protected void onPostExecute(JSONArray list)
{
for (int i = 0; i < list.length(); i++)
{
try
{
JSONObject obj = new JSONObject();
obj = list.getJSONObject(i);
taskList.add(new Task(obj.get("author").toString(),obj.get("description").toString(),(Date)obj.get("due"),(Task.Priority)obj.get("priority"),(Task.Status)obj.get("status")));
}
catch(Exception e)
{
Log.e("YOUR_APP_LOG_TAG", "I got an error", e);
}
}
ListView view = (ListView) findViewById(R.id.taskListView);
TaskListAdapter theAdapter = new TaskListAdapter(taskList,getApplicationContext());
view.setAdapter(theAdapter);
view.invalidate();
}
}
편집 ... 일이에
을 내 머리를 깨는되었습니다 내가 로그 캣에서 아무것도하지 않기 때문에 예외가 캐치하지 않습니다.
는 ... 그것은 그 관련이있을 수 있을까? – AndroidNoob