新的ParseObject设置读取权限错误

3

我在我的Android应用程序的应用程序类中放置了以下代码:

// Register ParseObject subclasses
ParseObject.registerSubclass(Results.class);

// Set up Parse
Parse.enableLocalDatastore(MyApplication.this);
Parse.initialize(MyApplication.this, PARSE_APP_KEY, PARSE_CLIENT_KEY);
ParseUser.enableAutomaticUser();
ParseACL defaultACL = new ParseACL();
ParseACL.setDefaultACL(defaultACL, true);

每当我安装我的应用程序并创建新的Results对象时,它似乎能够正常工作。但是,如果我通过Play商店更新我的应用程序或通过Android Studio覆盖安装它,则在创建新的Results对象或任何其他ParseObject或其子类时,会出现以下错误:
java.lang.IllegalArgumentException: cannot setReadAccess for a user with null id

这是Parse的一个bug吗?使用离线Todo示例时也会得到相同的结果。

在我看来,ParseUser.enableAutomaticUser() 似乎不允许设置 ACL - 我不确定为什么,因为我从未使用过自动用户功能。 - Andrew Breen
奇怪的是,应用程序中一切正常(ParseObjects被创建而没有ACL错误),直到我更新它或使用另一个开发版本覆盖安装。 - Zac
2个回答

6

你需要确保保存当前用户。

// Register ParseObject subclasses
ParseObject.registerSubclass(Results.class);

// Set up Parse
Parse.enableLocalDatastore(MyApplication.this);
Parse.initialize(MyApplication.this, PARSE_APP_KEY, PARSE_CLIENT_KEY);
ParseUser.enableAutomaticUser();
ParseUser.getCurrentUser().saveInBackground(); // <--- This Line
ParseACL defaultACL = new ParseACL();
ParseACL.setDefaultACL(defaultACL, true);

我对语法不是完全确定,因为我只用过Swift。


当我尝试这样做时,我得到了一个不同的错误:IllegalArgumentException: Cannot save a ParseUser until it has been signed up. Call signUp first.我的目标是将Parse数据存储为匿名用户,直到用户想要注册。然后允许保存到云端。 - Zac
在我的应用程序中,我没有调用注册功能,它仍然可以正常工作。你能否匿名为他们注册吗? - Dehli
1
没事了,我说得太早了。在尝试那段代码之前,我没有完全卸载应用程序。现在,如果我在先前的版本上安装,它似乎可以工作。谢谢! - Zac

3

从设备中删除该应用程序,然后重新安装。它应该可以正常工作。

这是我的设置

    //Parser App Crash Report
    ParseCrashReporting.enable(this); //THIS is to test only =>  throw new RuntimeException("Test Exception!");

    // Enable Local Datastore.
    Parse.enableLocalDatastore(this);

    // Initialise
    Parse.initialize(this, PARSE_APP_ID, PARSE_CLIENT_KEY);


    ParseUser.enableAutomaticUser();
    ParseUser.getCurrentUser().saveInBackground();
    ParseACL defaultACL = new ParseACL();

    // If you would like all objects to be private by default, remove this line.
    defaultACL.setPublicReadAccess(true);

    ParseACL.setDefaultACL(defaultACL, true);

那么进行测试:
ParseObject testObject = new ParseObject("TestObject");
testObject.put("foo", "bar");
testObject.put("2", "2");
testObject.put("3", "3");
testObject.saveInBackground();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接