0

我有下面的代碼,這是正在將其註冊,以接收週期性的(1每秒)廣播的一類稱爲:的Android的AsyncTask日誌記錄失敗

public void onReceive(Context c, Intent i) { 
    Log.d("NET", "Polling server..."); 
    try { 
     Request.getChanges(); 
    } catch (Exception e) { 
     Log.w("NET", "Error polling server: " + e.toString()); 
    } 
} 

然而,由於該代碼被解僱關閉作爲一個BroadcastReceiver,並在UI線程從而得到運行,我得到:

Error polling server: android.os.NetworkOnMainThreadException 

所以我決定嘗試在一個替代的AsyncTask:

public void onReceive(Context c, Intent i) { 
    class Task extends AsyncTask<Void, Void, Void> { 
     @Override 
     protected Void doInBackground(Void... arg0) { 
      Log.d("NET", "Polling server..."); 
      try { 
       Request.getChanges(); 
      } catch (Exception e) { 
       Log.w("NET", "Error polling server: " + e.toString()); 
      } 
      return null; 
     } 
    } 
    new Task().execute(); 
} 

但是,當我這樣做時,我什麼都得不到輸出。任何想法是什麼問題在這裏?謝謝!

+0

爲什麼你不只是同一個線程(...)包呢? – nKn

+0

據我所知,AsyncTask基本上是一個產生新線程的包裝器,使得該過程更容易一些。 – joshlf

+0

除了這個在你的應用程序中還有其他的AsyncTask嗎? – nKn

回答

1

好像幾個星期前你打過我的牆。我已經有一個AsyncTask完美運行,我複製了另一個相同的結構,試圖啓動它 - 沒有結果。當我到達this時,我已經生氣了。

恢復,所有你需要做的是:

if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.HONEYCOMB_MR1) 
    new Task().execute(); 
else 
    new Task().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); 
+0

固定它;謝謝! – joshlf