Java 获取接口方法的返回值
我已经实现了这个接口:Java 获取接口方法的返回值,java,android,callback,return-value,Java,Android,Callback,Return Value,我已经实现了这个接口: public interface Callback { public abstract ArrayList<String> done(ArrayList<Document> docs); } 公共接口回调{ 完成公开摘要ArrayList(ArrayList文档); } 此外,该方法还包括: public void getNearUsers(Callback callback, LatLng loc) { new Ge
public interface Callback {
public abstract ArrayList<String> done(ArrayList<Document> docs);
}
公共接口回调{
完成公开摘要ArrayList(ArrayList文档);
}
此外,该方法还包括:
public void getNearUsers(Callback callback, LatLng loc) {
new GetNearUsersASyncTask(callback, loc).execute();
}
public class GetNearUsersASyncTask extends AsyncTask<Void, Void, ArrayList<Document>>{
Callback callback;
LatLng loc;
ArrayList<Document> documents;
public GetNearUsersASyncTask(Callback callback, LatLng loc){
this.callback=callback;
this.loc=loc;
documents = new ArrayList<>();
}
@Override
protected ArrayList<Document> doInBackground(Void... params) {
...
return documents;
}
@Override
protected void onPostExecute(ArrayList<Document> docs) {
...
callback.done(docs);
super.onPostExecute(docs);
}
}
public void getNearUsers(回调、LatLng loc){
新的GetNearUsersASyncTask(回调,loc).execute();
}
公共类GetNearUsersASyncTask扩展异步任务{
回调;
LatLng loc;
ArrayList文件;
公共GetNearUsersASyncTask(回调,LatLng loc){
this.callback=callback;
这个.loc=loc;
documents=newarraylist();
}
@凌驾
受保护的ArrayList doInBackground(无效…参数){
...
归还文件;
}
@凌驾
PostExecute上受保护的void(ArrayList文档){
...
回调。完成(文档);
super.onPostExecute(文档);
}
}
最后,这个:
public ArrayList<String> gotoRec() {
final ArrayList<String> finalPostIDs = new ArrayList<>();
serverRequest.getNearUsers(new Callback() {
@Override
public ArrayList<String> done(ArrayList<Document> users){
...
return finalPostIDs;
}
}, loc);
}
});
//return the finalPostIDs of override method;
}
public ArrayList gotoRec(){
最终ArrayList FinalPostId=新ArrayList();
serverRequest.getNearUsers(新回调(){
@凌驾
公共ArrayList已完成(ArrayList用户){
...
返回finalPostId;
}
},loc);
}
});
//返回override方法的finalPostId;
}
我的问题是:
如何让回调接口的finalPostId返回ArrayList,以便在gotoRec方法中返回它?有路吗?或者我应该走另一条路吗?不可能。AsyncTask是异步的,所以您不能强制方法等待其结果,然后返回值-它将删除异步点。好的,我也这么认为,我只是想知道是否有一种“神奇”的方法:p谢谢您的回答!所以没有办法在getNearUsers之外检索FinalPostId,对吗?我真的不明白回调接口的意义。为什么不将一些对象引用传入AsyncTask构造函数,然后从onPostExecute调用其公共方法呢?您可以将done()方法中的逻辑移到onPostExecute。我要用这种方法试试。不可能。AsyncTask是异步的,所以您不能强制方法等待其结果,然后返回值-它将删除异步点。好的,我也这么认为,我只是想知道是否有一种“神奇”的方法:p谢谢您的回答!所以没有办法在getNearUsers之外检索FinalPostId,对吗?我真的不明白回调接口的意义。为什么不将一些对象引用传入AsyncTask构造函数,然后从onPostExecute调用其公共方法呢?您可以将done()方法中的逻辑移到onPostExecute。我就这样试试