0

次のコードがありました。これは、定期的な (1 秒あたり 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 に答える