【问题标题】:update parse object using BeforeSave使用 BeforeSave 更新解析对象
【发布时间】:2016-03-02 17:35:49
【问题描述】:

我正在制作一个简单的货币交易应用程序,其中 user1 使用 parse.com 和云代码将钱转移到 user2 以使用 masterkey 授予 user1 权限以覆盖所有其他权限。

final ParseQuery<ParseObject> parseQuery = ParseQuery.getQuery(user.getClassName());
            Log.d("class found : ",String.valueOf(user.getClassName()));
            parseQuery.whereMatches("AccountNumber", mAccountNumber.getText().toString().trim());
            parseQuery.getFirstInBackground(new GetCallback<ParseObject>() {
                @Override
                public void done(final ParseObject parseObject, ParseException e) {
                    if (parseObject != null) {
                        Log.d("userID",String.valueOf(parseObject.getObjectId()));
                        balance = Integer.parseInt(mbalance.getText().toString());
                        q = parseObject.getInt("balance");
                        parseObject.put("balance", balance + q);
                        parseObject.saveInBackground(new SaveCallback() {
                            @Override
                            public void done(ParseException e) {
                                if (e == null) {
                                    Toast.makeText(TransferToAccount.this, "DOne!!", Toast.LENGTH_SHORT).show();
                                } else {
                                    Log.d("Exception", "1");
                                    e.printStackTrace();
                                }
                            }
                        });
                    } else {
                        Log.d("Exception", "2");
                        Toast.makeText(TransferToAccount.this, "No user found ", Toast.LENGTH_SHORT).show();
                        e.printStackTrace();

这是可能的代码:

Parse.Cloud.beforeSave(Parse.User, function(request, response) {
Parse.Cloud.useMasterKey(); 
var user = request.user;
if (user.existed()) { return; }
user.setACL(new Parse.ACL(user));
user.save();
// add user to role
var roleName = "member";
var roleQuery = new Parse.Query(Parse.Role);
roleQuery.equalTo("name", roleName);
roleQuery.first().then(function(role) {
role.getUsers().add(user);
// save role
return role.save();
});

当我尝试转移时,我得到一个Exception

W/System.err: com.parse.ParseException: java.lang.IllegalArgumentException: Cannot save a ParseUser that is not authenticated.

W/System.err: Caused by: java.lang.IllegalArgumentException: Cannot save a ParseUser that is not authenticated.

对不起,如果我让自己不清楚。

【问题讨论】:

  • 请记住 Parse 正在关闭,因此最好尽快离开它。与此同时,我希望有人能提供帮助。
  • @Vidia 我正在为我的大学项目使用解析,所以这不会成为问题 atm,无论如何,谢谢。

标签: javascript android android-studio parse-platform parse-cloud-code


【解决方案1】:

在用户保存之前,您不能为其分配角色。尝试将其更改为 afterSave 触发器。

【讨论】:

  • 结果:TypeError:无法在 e. (main.js:19:10) 在 e.i (Parse.js:14:27703) 在 e.a.value ( Parse.js:14:27063) 在 e. (Parse.js:14:27774) 在 e.i (Parse.js:14:27703) 在 Parse.js:14:28316 在 l (Parse.js:14 :28120) 在 e.a.value (Parse.js:14:28301) 在 e.i (Parse.js:14:27748) 在 e.a.value (Parse.js:14:27063)
  • 它似乎无法识别 getUsers(),我不知道它是否是您定义的一些函数,但我会删除它并尝试类似于 role.relation("users").add(user);
【解决方案2】:

阅读this 之后,我可以通过创建第二个类来解决我的问题,该类带有指向_User 的指针,而无需云代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多