我有以下代码:
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;
}
我想返回“用户”对象。
最好的方法是什么?
答案 0 :(得分:0)
假设以下事项:
执行此操作的同步/线性方式是
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.
} ..