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

时间:2016-09-05 13:28:54

标签: java android android-studio android-asynctask

我想知道如何访问数据并将其绑定到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(...);

3 个答案:

答案 0 :(得分:4)

doInBackground() return后,onPostExecute()将被转发至TestUsage

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

答案 1 :(得分:0)

我无法抓住

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

        return ....;//return some data
    }

主UI的结果。

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

例如创建一个界面:

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()

更新用户界面

答案 2 :(得分:0)

如果您只想从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();