2013-07-14 110 views
0

我在我的UI線程內創建了一個名爲FetchTaskList的類,它擴展了AsyncTask。 我正在使用服務器套接字並試圖從套接字的輸入流讀取。 調試時,doInBackground只是在while循環結束後停止,因此onPostExecute永遠不會被調用。這是爲什麼發生?我一直在打破我的頭在這幾天...AsyncTask doInBackground停止...沒有異常拋出

TaskListActivity.java

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(); 
    } 

} 

編輯:我不logcat中得到任何東西,所以沒有異常被捕獲。

回答

0
while(scanner.hasNext()) 

應該是:

while(scanner.hasNextLine()) 
+0

這只是在服務器上解析2擋我的一個JSONObjects的3 ...難道是相關的? – AndroidNoob