Android Honeycomb:Fragment无法启动AsyncTask?

2023-12-07

我遇到过这个错误以前,但认为这是严格模式系统的一些错误。然而,这显然是正确的,因为我现在悲伤地发现。 :(

我的程序由一个活动和大量片段组成。我有一个 Network Worker 片段,它启动如下 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 请求的 Fragment。当我在 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 与 Fragments 一起使用?还是我做错了什么?

感谢您的帮助, 海蜇


不要打电话doInBackground直接打电话execute相反(在异步任务上)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android Honeycomb:Fragment无法启动AsyncTask? 的相关文章

随机推荐

  • 可以使用“new”位置来更改“const”数据吗?

    这是后续memcpy 可以用来更改 const 成员数据吗 And 声明 C 不可变类的惯用方式真正解决这个问题 尤其是this回答 在围绕不可变数据设计的语言中 它知道它可以 移动 您的数据 尽管它具有 逻辑 不变性 Given a st
  • 如何在 AutoFixture 中设置更复杂(类似 IoC)的注册

    使用 AutoFixture 时 是否可以在集成测试中重用生产 IoC 容器注册 问题是 如果未注册依赖项并注入 真实 数据库相关依赖项 我需要以下固定装置设置来注入模拟 var fixture new Fixture WithMocks
  • 使用 JavaFX 将渐变应用于球体对象

    我正在 JavaFX 中工作 我正在尝试将渐变应用于球体 但是 显然 我不知道该怎么做 我被困住了 因为我知道球体是一个对象 所以它需要有一种材质 但是 就颜色而言 PhongMaterial 只采用一种颜色 所以它不会采用渐变 因为渐变是
  • pyQt Matplotlib 小部件实时数据更新

    使用 pyQt 4 8 5 在 Python 2 7 中编写 如何在 pyQt 中实时更新 Matplotlib 小部件 目前 我正在对数据进行采样 现在是 random gauss 附加此数据并进行绘图 您可以看到我每次都会清除该数字并为
  • 将具有多个键的字典按一个键求和的最有效方法是什么?

    我有以下字典结构 product1 product tmpl id product id qty product uom qty price price unit subtotal price subtotal total price to
  • 在appdomain中加载静态类

    我在 C AppDomain 中遇到了一个大问题 我需要在 dll 文件中加载静态类并执行其方法 当我尝试通过以下方式加载它们时 Assembly LoadFrom XXXXX XXXXX is the full path of dll d
  • Laravel 递归关系

    我正在做一个项目Laravel 我有一个可以有父母或可以有孩子的帐户模型 所以我的模型设置如下 public function immediateChildAccounts return this gt hasMany Account ac
  • 仅对特定像素着色

    我有一个代表大脑图像的矩阵 每个 i j 位置的值都在 0 和 1 之间 我正在应用颜色图 以便那些值为 1 的像素为红色 0 为黄色 介于两者之间的像素得到中介值 现在 我想要的是那些值高于 0 8 的像素根据颜色图获得颜色 其余的变得透
  • 在另一个程序集中找到 Razor Pages

    我想在另一个程序集中找到 我的项目 Razor 页面 为此 我编写以下代码 public void ConfigureServices IServiceCollection services var adminAssembly Assemb
  • 应该避免 query_posts() 吗?

    我正在读那个query posts 应避免有利于wp query and pre get posts 我对弄乱循环没有信心 也不完全理解法典 下面的代码是否使用query posts 如果是的话 从那时起query posts 应该避免 你
  • 如何将一组变量放置在 gcc 的特定部分中,arm 是否有类似 #pragma default_variable_attributes 的内容

    下面的链接https www iar com support tech notes linker how do i place a group of functions or variables in a specific section
  • Web Worker 中的传感器读取

    看来我们无法在网络工作者中获取传感器数据 我想知道其背后的原因 用例是我正在考虑在工作线程中获取地理位置数据 并且仅将处理后的版本发送到主线程 对于 GPS 这post说工作线程不支持它 没有给出原因 我仔细检查了一下 网络工作人员不支持
  • SWT Tree - 可以降低本机展开图标吗?

    我有一个JFaceTreeViewer与 SWTTree底层 我正在绘制我的单元格 为自己提供多行支撑 目前 它看起来像这样 我希望展开图标和标签都像这样降低 这对于标签来说没有问题 因为我从StyledCellLabelProvider并
  • 根据日期检查创建新列

    我在 Scala 中有两个数据框 df1 ID Field1 1 AAA 2 BBB 4 CCC and df2 PK start date time 1 2016 10 11 11 55 23 2 2016 10 12 12 25 00
  • getSupportActionBar() 在 Android 应用程序中返回 Null

    我正在尝试在 Android Studio 中使用选项卡执行操作 但是getSupportActionBar 总是返回 null 我只想要一个带有 3 个选项卡的简单操作栏 我可以在其中单击 但操作栏或选项卡都没有出现 这是我的代码 imp
  • ios pjsip - 在 sip 通话期间播放声音

    当我进行 sip 呼叫时 有时我想发送 dtmf 数字 为此 我创建了一个自定义拨号盘 当按下某个键时 该拨号盘应播放该键的声音 但在 sip 呼叫期间不会播放该声音 当没有呼叫时 会播放声音 这些声音是通过以下函数播放的AudioTool
  • 使用 simpleDateFormat java 解析日期

    我想将字符串解析为日期 但获得的日期不正确 我的代码是这样的 SimpleDateFormat df new SimpleDateFormat dd MMM yy hh mm ss S a date1 df parse 17 DEC 19
  • ' aria-label='pip install 生成警告: 'NewConnectionError(''> pip install 生成警告: 'NewConnectionError('

    我花了很多时间搜索是否有人已经遇到了同样的问题 但我没有找到任何东西 一段时间以来 每次我想用 pip 安装软件包时都会收到警告 安装最终成功 但需要更多时间 该警告包含重复 5 次相同的 WARNING WARNING Retrying
  • 如何使 exe 运行而不需要同一目录中的所有 dll 文件?

    因此 如果可能的话 我尝试将所有 DLL 文件合并到我的 exe 中 这样我就可以运行 exe 而不需要同一目录中的 DLL 文件 我试着四处寻找其他人问同样的问题 但没有真正找到任何有用的东西或任何我个人可以遵循的东西 先谢谢您的帮助 选
  • Android Honeycomb:Fragment无法启动AsyncTask?

    我遇到过这个错误以前 但认为这是严格模式系统的一些错误 然而 这显然是正确的 因为我现在悲伤地发现 我的程序由一个活动和大量片段组成 我有一个 Network Worker 片段 它启动如下 URL 请求 public void start