Parse ANDROID SDK не позволяет удалить и возвращает [MongoError: исключение: Мод на _id не разрешен] в журнале

Parse android sdk не позволяет обновлять столбец в пользовательской таблице. Хотя я использую метод getCurrentUser(), чтобы пометить его как аутентифицированный, но когда я вызываю save на нем. это дает мне ошибку в файле журнала,

 Uncaught internal server error. { [MongoError: exception: Mod on _id not allowed]
  name: 'MongoError'

ниже мой код, который я использую для сохранения

byte[] data = "Working at Parse is great!".getBytes();
        final ParseFile file = new ParseFile("abcdef.txt", data);



    ParseUser currentUser = ParseUser.getCurrentUser();
        if (currentUser != null) {
            // do stuff with the user
            currentUser.put("column_name", file);
            currentUser.saveInBackground(new SaveCallback() {
                @Override
                public void done(ParseException e) {
                    if (e == null) {
                        Log.i("KQ", "update successfully");
                    } else {
                        Log.i("KQ", "update error e = " + e);
                    }
                }
            });
        } else {
            // show the signup or login screen
            Log.i("KQ", "else");
        }

2 ответа

Решение

Пока я не получу хороший ответ. В настоящее время я использую свой облачный код beforeSave, запускающий синтаксический анализ, чтобы удалить поле id, чтобы избавиться от исключения и разблокировать свою работу. Любой хороший ответ все равно будет оценен.

код, который я сейчас использую, в облачном коде выглядит следующим образом.

Parse.Cloud.beforeSave(Parse.User, function(request, response) {
    // For Android SDK remove id field while updating a user becasue it was creating MongoDB Exception in android.
    if (request.object.get("updatedFrom") == 'android') {
        request.object.unset("updatedFrom");
        request.object.unset("id");
    }
    response.success();
});

Благодарю.

Вы должны сохранить ParseFile, прежде чем прикреплять его к объекту User. Ваш код должен быть таким

byte[] data = "Working at Parse is great!".getBytes();
    final ParseFile file = new ParseFile("abcdef.txt", data);
    file.saveInBackground(new SaveCallback() {
        @Override
        public void done(ParseException e) {
            if(e==null)
            {
                ParseUser currentUser = ParseUser.getCurrentUser();
                if (currentUser != null) {
                    // do stuff with the user
                    currentUser.put("column_name", file);
                    currentUser.saveInBackground(new SaveCallback() {
                        @Override
                        public void done(ParseException e) {
                            if (e == null) {
                                Log.i("KQ", "update successfully");
                            } else {
                                Log.i("KQ", "update error e = " + e);
                            }
                        }
                    });
                } else {
                    // show the signup or login screen
                    Log.i("KQ", "else");
                }
            }
        }
    });
Другие вопросы по тегам