如何从具有内部类的方法返回

时间:2015-05-29 19:19:21

标签: java android

我是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;

    });
}

1 个答案:

答案 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
}