如何从android中的AsyncTask类中获取数据?

Posted

技术标签:

【中文标题】如何从android中的AsyncTask类中获取数据?【英文标题】:How to fetch data out of AsyncTask class in android? 【发布时间】:2017-01-12 21:21:28 【问题描述】:

我想知道如何访问数据并将其绑定到 AsyncTask 类主体之外的组件?

我有这样的课:

class DownloadData extends AsyncTask<String, Void, String> ....

它有一个方法:

@Override
protected String doInBackground(String... params) 

        return ....;//return some data
    

不明白 doInBackground 返回数据到哪里?

因为当我想使用我的课程时,我会像这样使用它:

      DownloadData dd = new DownloadData();
            dd.execute(...);

我可以这样使用它吗?因为我想从我的主类中获取返回的数据以将其绑定到某些组件

      DownloadData dd = new DownloadData();
        string temp=dd.doInBackground(...);

【问题讨论】:

查看答案并确认是否有帮助 【参考方案1】:

doInBackground() 之后,您的return 将被转发到onPostExecute()

要在您的活动中使用它,请参考此链接:How to use Async result in UIThread

【讨论】:

如果有帮助,请对此答案投票。编码快乐!【参考方案2】:

抓不住

@Override
protected String doInBackground(String... params) 

        return ....;//return some data
    

主界面的结果。

你必须使用回调。例如,您可以使用接口获取结果。

例如创建一个接口:

public interface IProgress 
    public void onResult(int result);

创建类:

     private class DownloadData extends AsyncTask<String, Void, String> 
    private IProgress cb;
    DownloadData(IProgress progress)  
    this.cb = cb;
    
@Override
protected String doInBackground(String... params) 


for (int i = 0; i < 10; i ++) 
if (cb!=nil)
cb.onResult(i);//calls 10 times

....
    
...
    

代码中的某处:

DownloadData dd = new DownloadData( new IProgress() 
public void onResult(int result) 
/// this is your callback

//to update mainUI thread use this:
final res = result;
runOnUiThread(new Runnable() 
                @Override
                public void run() 
                    //update UI here
textview.setText("" + res);
                
            );


);
            dd.execute(...);

而且,像往常一样,您可以在 doInBackground 之后通过 onPostExecute() 更新 UI

【讨论】:

【参考方案3】:

如果您只想从 AsyncTask 类返回一个结果,以便您可以根据结果更新活动中的 UI,您可以执行以下操作: 在你的 AsyncTask 类中声明一个这样的接口:

private AsyncResponse asyncResponse = null;

public DownloadData(AsyncResponse as) 
    this.asyncResponse = as;
 

public interface AsyncResponse 
    void onAsyncResponse(String result); // might be any argument length of any type

onPostExecute()

asyncResponse.onAsyncResponse(result); // result calculated from doInBackground()

在活动类中:

DownloadData dd = new DownloadData(new AsyncResponse() ...); // implement onAsyncResponse here
dd.execute();

【讨论】:

以上是关于如何从android中的AsyncTask类中获取数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 android 中的 AsyncTask 获取 UI 参考

如何将变量从 AsyncTask 返回到 Android 中的 Google Map 活动

在任何地方使用我的 AsyncTask 类中的变量

从 Activity 调用时,另一个 AsyncTask 类中的 ProgressDialog 未显示

Android -- 如何从 https 获取图片

在其他类中获取 AsyncTask 的输出