Android Honeycomb: Фрагмент не может запустить AsyncTask?

Раньше я сталкивался с этой ошибкой , но думал, что это была ошибка системы строгого режима. Однако, похоже, это было правильно, как я, к сожалению, узнал сейчас. 🙁

Моя программа состоит из одного действия и нагрузок Фрагментов. У меня есть фрагмент NetworkWorker, который запускает URL-запросы следующим образом:

public void startURLRequest(Fragment target, String url, String message) { if (asyncTask != null) asyncTask.cancel(true); asyncTask = new FragmentHttpHelper(url, message, target); asyncTask.doInBackground(); return; } 

FragmentHttpHelper – это собственный внутренний класс, полученный из AsyncTask:

 private class FragmentHttpHelper extends AsyncTask<Void, Void, String> { //... @Override protected String doInBackground(Void... params) { if (CheckInternet()) { try { URL myURL = new URL(url); httpClient = new DefaultHttpClient(); if (this.message == null) { httpRequest = new HttpGet(myURL.toExternalForm()); } else { httpRequest = new HttpPost(myURL.toExternalForm()); HttpEntity myEntity = new StringEntity(message, "UTF-8"); ((HttpPost) httpRequest).setEntity(myEntity); } // and so on... } //catches finally { // auf jeden Fall Verbindung beenden if (httpRequest != null) httpRequest.abort(); // if (httpClient != null) httpClient.close(); } } else { showDialog(getString(R.string.net_notify_no_network), target); } //... } /** * gets called after AsyncTask has finished */ protected void onPostExecute(String result) { if (target == null) { ((NetworkWorkerListener) getActivity()).onDownloadHasFinished((!result.contentEquals(ERROR)), result); } else { ((NetworkWorkerListener) target).onDownloadHasFinished((!result.contentEquals(ERROR)), result); } } } 

NetworkWorkerListener – это просто интерфейс для обратного вызова на фрагменте, который запустил URL-запрос. Этот класс всегда работал нормально, когда я использовал его в своем приложении 2.2. Тогда я бы получил его в своих занятиях.

Теперь, если выбран пункт меню, другой рабочий фрагмент запускает URL-запрос с помощью указанного метода и открывает диалоговое окно загрузки:

 FragmentManager fragmentManager = getFragmentManager(); NetworkWorker network = (NetworkWorker) fragmentManager.findFragmentByTag(TabletMain.NETWORK); if (network == null) return WorkerFeedback.NO_NETWORK_WORKER; myDialog = LoadingDialog.createInstance(getString(R.string.notify_download), this); myDialog.show(fragmentManager, TabletMain.ONETIME); network.startURLRequest(this, someurl, null); 

По крайней мере, это должно произойти. Вместо этого, когда я нажимаю элемент меню, мое приложение зависает, и диалог загрузки не отображается. Далее происходит реакция на конец загрузки (или, в моем случае, сообщение об ошибке, поскольку я отправляю бессмысленные строки). Достигнуто значение onPostExecute ().

Я чувствую себя действительно застрявшим сейчас – нельзя ли использовать AsyncTask с фрагментами? Или я сделал что-то не так?

Спасибо за вашу помощь, медуза

Не вызывайте doInBackground напрямую, вместо этого doInBackground вызов execute (в async-задаче)

Intereting Posts
Остановить Android MediaPlayer, автоматически запущенный веб-страницей в WebView Открытие приложения для Android в другом Возможно ли обновить программу Android Manifest? Внедрение DatePicker в фрагменте Скрыть мягкую клавиатуру при действии без каких-либо операций с клавиатурой RecyclerView с CollapsingToolbarLayout сильно прокручивается при откидывании Как создать ключ API для GCM? Soft Keyboard открывается, затем закрывается нажатием кнопки edittext Плагин com.intellij не удалось инициализировать и будет отключен: null Как настроить мою персональную клавиатуру в качестве стандартного ввода в моем приложении Отключить Android VideoView requestAudioFocus при воспроизведении видео? В Android, как мне задать Rect позицию X и Y? Где я должен использовать Service, AsyncTask и Broadcast Receiver? Передача файлов между Android и iPhone через Bluetooth? Передача последовательного устройства Bluetooth для Android / Xamarin с пустым выходным потоком