无法在Android中更新ParseUser
fafaapplication.sUserI可以保存新用户,但无法更新现有用户 请注意,mUser是通过mUser=ParseUser.getCurrentUser在CreateView上设置的 这是我的密码:无法在Android中更新ParseUser,android,parse-platform,Android,Parse Platform,fafaapplication.sUserI可以保存新用户,但无法更新现有用户 请注意,mUser是通过mUser=ParseUser.getCurrentUser在CreateView上设置的 这是我的密码: public void updateProfile() { if (validateFields()) { // i know i should only save if the values are new, but I'd like to get this w
public void updateProfile() {
if (validateFields()) {
// i know i should only save if the values are new, but I'd like to get this working first
mUser.put("name", "new name");
mUser.setEmail("new email");
final ParseFile file = new ParseFile("profile.jpg", mPhotoData);
file.saveInBackground(new SaveCallback() {
@Override
public void done(ParseException e) {
if(e == null) {
mUser.put("profileImage", file);
mUser.saveInBackground(new SaveCallback() {
@Override
public void done(ParseException e) {
// successful
if (e == null) {
((EditProfileActivity) getActivity()).endActivity();
Toast.makeText(getActivity().getApplicationContext(), getString(R.string.parse_profile_updated), Toast.LENGTH_SHORT).show();
}
// not successful
else {
Toast.makeText(getActivity().getApplicationContext(), "user " + getString(R.string.parse_try_again), Toast.LENGTH_SHORT).show();
e.printStackTrace();
}
}
});
}
else {
Toast.makeText(getActivity().getApplicationContext(), "file " + getString(R.string.parse_try_again), Toast.LENGTH_SHORT).show();
}
}
});
}
}
我从解析中获得以下堆栈跟踪:
W/System.err﹕ com.parse.ParseRequest$ParseRequestException: Parse::UserCannotBeAlteredWithoutSessionError
W/System.err﹕ at com.parse.ParseRequest.newPermanentException(ParseRequest.java:352)
W/System.err﹕ at com.parse.ParseRESTCommand.onResponseAsync(ParseRESTCommand.java:258)
W/System.err﹕ at com.parse.ParseRequest$3.then(ParseRequest.java:188)
W/System.err﹕ at com.parse.ParseRequest$3.then(ParseRequest.java:184)
W/System.err﹕ at bolts.Task$14.run(Task.java:796)
W/System.err﹕ at bolts.BoltsExecutors$ImmediateExecutor.execute(BoltsExecutors.java:105)
W/System.err﹕ at bolts.Task.completeAfterTask(Task.java:787)
W/System.err﹕ at bolts.Task.continueWithTask(Task.java:599)
W/System.err﹕ at bolts.Task.continueWithTask(Task.java:610)
W/System.err﹕ at bolts.Task$12.then(Task.java:702)
W/System.err﹕ at bolts.Task$12.then(Task.java:690)
W/System.err﹕ at bolts.Task$14.run(Task.java:796)
W/System.err﹕ at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
W/System.err﹕ at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
W/System.err﹕ at java.lang.Thread.run(Thread.java:856)
我不知道为什么我不能保存用户。为什么会话需要更改才能保存用户?如何防止这种情况发生,或者如何根据我的saveInBackground结果更新会话?听起来您需要在保存前调用logIn,如果是返回用户,该怎么办?我是否应该存储他们的用户名和密码字符串以再次调用登录?编辑-我可以更新用户。它只有在我登录、安装一个新的apk(由于测试没有),然后尝试更新配置文件时才会中断。这听起来像是应用商店版本之间的问题,对吧?听起来像是。也许你需要检测到版本更改,让用户重新登录。这是非常不幸的。是否每个人都有这个问题,或者你认为这是我做的不对,因为你可能不看我的代码就无法判断。我正在使用parse login开发一个应用程序,但我认为除了在登录时,我不会保存用户。根据您在代码中的注释,只有在发生更改时进行保存,才能减轻很多问题。您可以将其与ParseUser.isAuthenticated结合使用,以查看是否需要提示登录,并且可能不太频繁。