【问题标题】:How to resolve java.lang.IllegalArgumentException: cannot setReadAccess for a user with null id?如何解决 java.lang.IllegalArgumentException: cannot setReadAccess for a user with null id?
【发布时间】:2015-05-20 16:44:27
【问题描述】:

我已经检查了this link 并使用了接受的答案,但我也收到了这个错误。我的应用类代码是:

//Enable Parse crash reports
ParseCrashReporting.enable(this);

// Enable Local Datastore.
Parse.enableLocalDatastore(this);
Parse.initialize(this, "APP_ID", "CLIENT_ID");

ParseUser.enableAutomaticUser();
ParseUser.getCurrentUser().saveInBackground();
ParseACL defaultACL = new ParseACL();
//defaultACL.setPublicReadAccess(true);
ParseACL.setDefaultACL(defaultACL, true);

我的清单文件权限是:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />

我收到此错误:

java.lang.IllegalArgumentException: 无法为具有 null id 的用户设置ReadAccess

ParseObject photo = new ParseObject("Photo");

Photo ParseClass 有五个字符串类型的字段和一个指向 User 对象的 _User 类型指针字段。我创建了新的解析对象并将值放在相应的字段中,并将ParseUser.getCurrentUser() 放在指针字段中,然后固定在 Parse Local DataStore 中,以便可以在脱机模式下访问对象。

【问题讨论】:

  • 我无法解决这个错误,请帮忙!!
  • 尝试更改您的问题并在您的照片对象出现错误时提供更多代码
  • @OlegOsipenko:感谢您的回复,我已经编辑了帖子并描述了 Photo 对象及其使用方式。

标签: android parse-platform


【解决方案1】:

ParseUser.getCurrentUser().saveInBackground(); 是异步操作,当您尝试将当前用户放入 Photo 对象时,它实际上并没有保存。

尝试将回调添加到您的保存方法,然后在保存时放置您的用户。

ParseUser.getCurrentUser().saveInBackground(new SaveCallback() {
        @Override
        public void done(ParseException e) {
            if (null == e) {
                photo.put("user", ParseUser.getCurrentUser());
                photo.pin();
            }
        }
    });

【讨论】:

  • 但是ParseUser.getCurrentUser().saveInBackground();在应用程序类中被调用并且Photo对象的固定是在活动中完成的。那么每次我想固定对象时,是否应该在活动中调用ParseUser.getCurrentUser().saveInBackground();
  • 其实如果你没有对你的用户做任何改变,也没有必要每次都保存。只需检查用户是否有 id (null != ParseUser.getCurrentUser().getObjectId()) - 只有当它以前保存到 parse.com 时才具有它,如果是,请将用户 id 放入您的对象。否则如果没有 id 则保存用户。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-16
  • 1970-01-01
  • 1970-01-01
  • 2018-01-24
  • 2021-06-13
相关资源
最近更新 更多