2013-07-14 2 views
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(); 
    } 

} 

편집 ... 일이에

을 내 머리를 깨는되었습니다 내가 로그 캣에서 아무것도하지 않기 때문에 예외가 캐치하지 않습니다.

답변

0
while(scanner.hasNext()) 

은 다음과 같아야합니다 서버에서만 내 JSONobjects의 3 중 (2)를 분석하는 것

while(scanner.hasNextLine()) 
+0

는 ... 그것은 그 관련이있을 수 있을까? – AndroidNoob

관련 문제