============问题描述============
代码如下。
在主进程调用data.getData()后希望返回从API取得data,但是现在由于异步的关系resultSFSearchDataJSONParser直到主进程完全结束后才返回值,这样在getData()那里根本取不到data。
请问如何才能让getData()等待resultSFSearchDataJSONParser返回值以后自己才返回给主进程?
个人对handler多线程之类不太熟悉,能给我个简单的例子最好,谢谢啦。
class data
{
...
//取得数据
public Data getData(key) {
Data data = new Data();
params.put("word", key);
// 调用API取得数据
new DataLoader(){
@Override
public void resultSFSearchDataJSONParser(
SFSearchCountJSONParser sfSearchCountJSONParser, boolean isSuccess) {
// TODO Auto-generated method stub
super.resultSFSearchDataJSONParser(sfSearchCountJSONParser,isSuccess);
data = (Data)sfSearchCountJSONParser.result.get(0);
}
}.getData(this.key);
return data;
}
}
// API取得数据
class DataLoader implements SFSearchJSONParserDelegate {
Data data = new Data();
private SFSearchCountJSONParser searchJSONParser = null;
private HashMap<String, String> params = new HashMap<String, String>();
public void getData(String key) {
params.put("word", key);
searchJSONParser = new SFSearchCountJSONParser();
searchJSONParser.parserDelegate = this;
searchJSONParser.executeStockSearchCountByParams(params);
}
// 结果返回函数
@Override
public void resultSFSearchDataJSONParser(
SFSearchCountJSONParser sfSearchCountJSONParser, boolean isSuccess) {
// TODO Auto-generated method stub
data = (Data)sfSearchCountJSONParser.result.get(0);
}
}
============解决方案1============
你可以看看我在这个帖子里的回答,我在那里举例说明了怎么样用AsyncTask来把结果返回给UI线程。