public Data getData() { this.Data = new Data(); Data Data = new Data(); params.put("word", this.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); }
谢谢你的回答。不过我还是不太懂,能否请你就着我的代码给修改一下?
因为我的代码是下面这样的架构,在mainAdapter.java里面调用的data.getData(),不是太清楚AsyncTask该怎么用。
mainActivty.java ⇒ mainAdapter.java ⇒ data.java
代码有些乱,重新贴一下。
class data
{
...
public Data getData() {
this.Data = new Data();
Data Data = new Data();
params.put("word", this.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);
}
}
你需要做的,其实是在resultSFSearchDataJSONParser这个回调函数里去根据参数获取结果,并更新到UI上。
有点明白了,resultSFSearchDataJSONParser确实是个异步加载类,跟AsyncTaskLoader差不多。
最后想问的是我的UI刷新写在mainAdapter.java里,而resultSFSearchDataJSONParser回调是在data.java里,直接在data.java的resultSFSearchDataJSONParser()里更新UI好像不行。是不是应该把resultSFSearchDataJSONParser写在mainAdapter.java里才行?
有点明白了,resultSFSearchDataJSONParser确实是个异步加载类,跟AsyncTaskLoader差不多。
最后想问的是我的UI刷新写在mainAdapter.java里,而resultSFSearchDataJSONParser回调是在data.java里,直接在data.java的resultSFSearchDataJSONParser()里更新UI好像不行。是不是应该把resultSFSearchDataJSONParser写在mainAdapter.java里才行?
你创建了一个匿名类加载器,所以你在resultSFSearchDataJSONParser这个回调函数里可以直接访问mainAdapter的成员变量和局部变量,不需要把resultSFSearchDataJSONParser写在mainAdapter里。
有点明白了,resultSFSearchDataJSONParser确实是个异步加载类,跟AsyncTaskLoader差不多。
最后想问的是我的UI刷新写在mainAdapter.java里,而resultSFSearchDataJSONParser回调是在data.java里,直接在data.java的resultSFSearchDataJSONParser()里更新UI好像不行。是不是应该把resultSFSearchDataJSONParser写在mainAdapter.java里才行?
你创建了一个匿名类加载器,所以你在resultSFSearchDataJSONParser这个回调函数里可以直接访问mainAdapter的成员变量和局部变量,不需要把resultSFSearchDataJSONParser写在mainAdapter里。搞定了,又学了一招,非常感谢!!
马上结贴给分。