gpt4 book ai didi

java - Android - 多功能异步任务返回数据

转载 作者:行者123 更新时间:2023-11-30 09:09:07 24 4
gpt4 key购买 nike

我的移动编程模块类(class)作业遇到了一些问题。

基本上,我扩展了 Asynctask,它执行一个 php 脚本,该脚本根据输入访问我的 MYSQL 数据库。现在执行的功能之一要求我将数据从脚本返回到另一个类。上课顺序是这样的:

MainClass -> HelperClass -> NetworkClass(AsyncTask)

MainClass 执行 HelperClass 函数“QueryDatabase”,然后创建 php 脚本所需的数据,然后将此数据传递给 NetworkClass。

NetworkClass 然后执行数据库查询并存储接收到的数据(public var)HelperClass 然后从 NetworkClass 中提取数据。MainClass 然后从 HelperClass 中提取数据,然后对其进行处理。

目前这是我能想到的最好的方法,因为我想保持我的 NetworkClass 动态。然而,问题是 MainClass 没有等待 NetworkClass 在尝试拉取数据之前完全执行,因此处理没有完成。

最好的方法是什么?我可以在 MainClass 中执行数据库查询和提取数据之间设置延迟吗?

希望这是有道理的。

不太确定要发布什么代码,因为我有很多代码。对此感到抱歉。

最佳答案

不,永远不要使用一些随机延迟来假设完成请求需要多长时间。

您应该做的是实现一个接口(interface),用作异步任务 oncomplete 的回调。您在需要知道何时返回什么以及返回什么的地方实现此接口(interface),然后将接口(interface)对象传递给要在 oncomplete 方法中调用的 asynctask。

要考虑的另一件事是,如果它可能很密集,您可能还希望让您的数据库在后台线程上工作。

这可能是这样的

    class EZAsyncTask extends AsyncTask<Void, Void, String>
{

private AsyncTaskListener listener;

public EZAsyncTask(AsyncTaskListener listener)
{
super();
this.listener = listener;
}

@Override
protected String doInBackground(Void... params)
{
//somethign to do
return null;
}

@Override
protected void onPostExecute(String result)
{
super.onPostExecute(result);
listener.onCompletion(result);
}

public interface AsyncTaskListener
{
public void onCompletion(String result);
}

}

您的 Activity 中的使用情况或每次使用情况下可能看起来像这样的情况

EZAsyncTask ezTask = new EZAsyncTask(new AsyncTaskListener() {
@Override
public void onCompletion(String result)
{
// TODO handle response
}
});
ezTask.execute();

或者您可以让您的类/Activity 实现它,就像您可以让您的 Activity 实现 OnClickListener

您可以执行此操作的另一种方法是通过 Handler,您还可以执行其他模式。但我更喜欢这样做。简单、快速、干净。

关于java - Android - 多功能异步任务返回数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23190505/

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