我有关于异步任务的问题
使用2个活动“A”和“B”
输入一个单词从url中搜索并在DTO中存储值,然后从getter和setter中获取值。
我的并发症是我在我的活动“B”中实现了异步,并且该活动从同一个DTO获取值。
问题在于我的帖子如何知道在后台做的事情已经从DTO取得了价值并且DTO从互联网上获取了价值......如果网络连接速度慢的话。
我将意图从“A”发送到“B”并在“B”上显示结果
问题:
1。如果我删除异步,那么应用程序显示黑页并冻结(仅在连接速度较慢的情况下)但显示数据
2。如果我使用aync,那么有时进度对话显示很长时间,并且知道数据已经显示在UI中
代码链接https://www.dropbox.com/s/p27rpokz68sryv3/SearchData.java
https://www.dropbox.com/s/rm3i52djiay327u/SearchData_DTO.java
https://www.dropbox.com/s/2hpufx2a12480on/Search.java
请告诉我这个可能的解决方案
问候
答案 0 :(得分:1)
你需要监听asyntask完整的监听器,为此让你的活动一个impliment接口并从Activity B调用该方法,s Asyntask,s onpostexecute方法 因此,你的活动A将会知道B完成了他的任务,你可以做下一件事...... 希望这有帮助
public interface AsyncTaskCompletedListener {
public void OnResultSucceeded(String result);
}
public class LoginAsyncTask extends AsyncTask<String, Void, String> {
AsyncTaskCompletedListener mAsyncTaskCompletedListener;
@Override
protected String doInBackground(String... arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
protected void onPostExecute(String result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
mAsyncTaskCompletedListener.OnResultSucceeded(result);
}
}
这是接口Let Activity A impliment this和from Activity从onpostexecute调用
From Activity A
LoginAsyncTask customloginasync = new LoginAsyncTask(getActivity(),
FATCH_USER_LIST, arglist);
customloginasync.execute();
customloginasync.setOnResultsListener(new AsyncTaskCompletedListener() {
@Override
public void OnResultSucceeded(String result, int asyncTaskNo) {
Logger.logInfo("CustomLogin data=========" + result);
ParseAvailableUserData(result);
}
});