我是java的新手,我有一个方法,我正在尝试使用Parse.com的异步服务器调用包装器。我想返回一个自定义对象,其中包含我从调用中返回的信息,但是我得到了“错误:未知类” 基本上我试图阻止这个方法返回,直到调用done()。
我不确定java会如何处理这种事情,我习惯于在Objective-C中工作。在我在done()中设置属性之前,有没有人知道如何调用return语句?
public ServerResponse getRestaurauntProfile(){
ParseQuery<ParseObject> profileQuery = ParseQuery.getQuery("Restaurant");
profileQuery.whereEqualTo("user", ParseUser.getCurrentUser());
profileQuery.findInBackground(new FindCallback<ParseObject>() {
final ServerResponse mResponse = new ServerResponse();
@Override
public void done(List<ParseObject> list, ParseException e) {
if (e == null) {
mResponse.setReturnObject(list.get(0));
mResponse.setReturnException(null);
} else {
mResponse.setReturnObject(null);
mResponse.setReturnException(e);
}
}
return mResponse;
});
}
答案 0 :(得分:0)
一个很好的解决方案是利用Retrofit from Square。 Retrofit是一个用于处理异步网络调用的出色库。正如用户alfasin在评论中所说,你试图强制一个异步方法同步行动,这在Android中是一个很大的禁忌。如果你想继续使用你当前的代码结构,你可以大致重组它:
public void getRestaurauntProfile(){
ParseQuery<ParseObject> profileQuery = ParseQuery.getQuery("Restaurant");
profileQuery.whereEqualTo("user", ParseUser.getCurrentUser());
profileQuery.findInBackground(new FindCallback<ParseObject>() {
final ServerResponse mResponse = new ServerResponse();
@Override
public void done(List<ParseObject> list, ParseException e) {
if (e == null) {
mResponse.setReturnObject(list.get(0));
mResponse.setReturnException(null);
handleResponse(mResponse);
} else {
mResponse.setReturnObject(null);
mResponse.setReturnException(e);
handleResponse(mResponse);
}
}
});
}
public void handleServerResponse(ServerResponse mResponse){
//do whatever code handling you need here
}