下面是我的应用程序中的代码段。请原谅回调地狱。
user1.saveInBackground()已执行。
我得到了当前用户的实例,并在日志中先显示了它,然后显示了正确的值。然后,myQuery()
方法通过回调进行调用。
User user1 = (User) ParseUser.getCurrentUser();
Timber.d("User1 = %s", user1);
Timber.d("User1 display = %s", user1.getDisplayName());
myQuery(new MyCallback() {
@Override
public void onSuccess() {
User user5 = (User) ParseUser.getCurrentUser();
Timber.d("User5 = %s", user5);
Timber.d("User5 display = %s", user5.getDisplayName());
}
@Override
public void onFailed(Throwable t) {
Timber.e(t);
}
});
public void myQuery(@NonNull final MyCallback callback) {
ParseQuery<MyParseObject> myQuery = ParseQuery.getQuery(MyParseObject.class);
User user2 = (User) ParseUser.getCurrentUser();
Timber.d("User2 = %s", user2);
Timber.d("User2 display = %s", user2.getDisplayName());
myQuery.findInBackground(new FindCallback<MyParseObject>() {
@Override
public void done(List<MyParseObject> objects, ParseException e) {
if (objects == null) return;
User user3 = (User) ParseUser.getCurrentUser();
Timber.d("User3 = %s", user3);
Timber.d("User3 display = %s", user3.getDisplayName());
ParseObject.pinAllInBackground(objects, new SaveCallback() {
@Override
public void done(ParseException e) {
if (e == null) {
User user4 = (User) ParseUser.getCurrentUser();
Timber.d("User4 = %s", user4);
Timber.d("User4 display = %s", user4.getDisplayName());
callback.onSuccess();
} else {
callback.onFailed(e);
}
}
});
}
});
}
在myQuery()
方法中,我再次为用户实例调用ParseUser.getCurrentUser()
,并且值仍然相同。但是在myQuery.findInBackground()
回调中,用户实例的内存地址已更改(请参阅日志)。用户2的地址与用户3的地址不同,用户3到用户5的内存地址相同。
日志中没有显示异常。
User1 = com.my.test._parse._model.User@42057618
User1 display = test_display_name
User2 = com.my.test._parse._model.User@42057618
User2 display = test_display_name
User3 = com.my.test._parse._model.User@42a5ded0
User3 display =
User4 = com.my.test._parse._model.User@42a5ded0
User4 display =
User5 = com.my.test._parse._model.User@42a5ded0
User5 display =
任何想法为何更改了当前用户实例?我可能错过了一些东西。