gpt4 book ai didi

安卓蜂窝 : Fragment not able to start AsyncTask?

转载 作者:太空宇宙 更新时间:2023-11-03 12:24:17 24 4
gpt4 key购买 nike

我遇到了 this error之前,但认为这是严格模式系统的一些错误。然而,这显然是正确的,因为我现在很遗憾地发现了。 :(

我的程序由一个 Activity 和大量 fragment 组成。我有一个 NetworkWorker fragment ,它像这样启动 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 只是一个接口(interface),用于在启动 URL 请求的 Fragment 上进行回调。当我在我的 2.2 应用程序中使用这个类时,它一直运行良好。然后我会在我的 Activity 中导出它。

现在,如果选择了一个菜单项,另一个工作 Fragment 通过上述方法启动 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);

至少这是应该发生的事情。相反,当我单击菜单项时,我的应用程序卡住并且直到显示加载对话框。接下来发生的是对下载结束的 react (或者,在我的例子中是一条错误消息,因为我正在发送无意义的字符串)。意思是达到了 onPostExecute()。

我现在感觉真的卡住了——是不是不能将 AsyncTask 与 Fragment 一起使用?还是我做错了什么?

感谢您的帮助,水母

最佳答案

不要直接调用doInBackground,而是调用execute(在异步任务上)

关于安卓蜂窝 : Fragment not able to start AsyncTask?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6412464/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com