在Inner方法中返回一个对象?

时间:2015-11-17 23:27:09

标签: java android inner-classes

我有以下代码:

public User getUser(String objId) {
    ParseQuery<User> query = ParseQuery.getQuery(Constants.PARSE_CLASS_USER);
    query.getInBackground(objId, new GetCallback<User>() {
        public void done(User user, ParseException e) {
            if (e == null) {
                // i want to return to my method the "user" user
            } else {
                // something went wrong
            }
        }
    });
    return this._user;
}

我想返回“用户”对象。

最好的方法是什么?

1 个答案:

答案 0 :(得分:0)

假设以下事项:

  • 通过一些输入获得userId
  • 您想要获取用户对象
  • 你想要显示它

执行此操作的同步/线性方式是

void allTheThings(EditText input) {
    // some preparation
    String userId = input.getText();
    // fetch user
    User user = getUser(userId);
    // display it.
    mTextView.setText(user.getName());
}

但如果getUser需要时间,因为这可能是网络,你的程序在那段时间内无法做任何事情。所以它冻结了。结果可能是一个很好的ApplicationNotResponding屏幕。

但是你在获取用户期间冻结程序并不感兴趣,因此异步会起作用。当程序继续在主线程中执行其他操作时,例如每次用户滚动时更新屏幕,它会在后台获取用户并在完成后报告。

但这需要不同的流程:

void justSomeOfTheThings(EditText input) {
    // some preparation
    String userId = input.getText();
    // fetch user
    goFetchUser(userId);
    // return control back to the app so it can do other things.
}

void onUserDone(User user) {
    // display it.
    mTextView.setText(user.getName());
}

并在你执行的异步方法的结果回调中

if (e == null) {
    onUserDone(user); // or use it directly here.
} ..