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