0

我有以下代码,该代码在注册为接收定期(每秒 1 个)广播的类中调用:

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

但是,当我这样做时,我没有得到任何输出。知道这里有什么问题吗?谢谢!

4

1 回答 1

1

几周前,你似乎和我碰上了同一堵墙。我已经有一个AsyncTask完美运行,我为另一个复制了相同的结构,尝试启动它 - 没有结果。当我到达这里时,我已经对它发疯了。

恢复,您所要做的就是:

if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.HONEYCOMB_MR1)
  new Task().execute();
else
  new Task().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
于 2014-01-14T22:09:33.147 回答