Java 解析本地数据存储:我可以';在强制关闭应用程序后,是否无法从网络访问受ACL保护的对象?(安卓)
成功登录后,我将呼叫:Java 解析本地数据存储:我可以';在强制关闭应用程序后,是否无法从网络访问受ACL保护的对象?(安卓),java,android,facebook,sdk,parse-platform,Java,Android,Facebook,Sdk,Parse Platform,成功登录后,我将呼叫: ParseUser currentUser = ParseUser.getCurrentUser(); currentUser.isAuthenticated() 现在,如果我通过home按钮或多任务切换到另一个应用程序并返回到我的应用程序,则当前用户仍然经过身份验证 但如果我强制关闭应用程序,然后重新打开它,则当前用户未通过身份验证。因此,我似乎无法通过以下方式从添加了默认访问控制列表(ACL)的网络访问任何对象: Parse.enableLocalDatastore
ParseUser currentUser = ParseUser.getCurrentUser();
currentUser.isAuthenticated()
现在,如果我通过home按钮或多任务切换到另一个应用程序并返回到我的应用程序,则当前用户仍然经过身份验证
但如果我强制关闭应用程序,然后重新打开它,则当前用户未通过身份验证。因此,我似乎无法通过以下方式从添加了默认访问控制列表(ACL)的网络访问任何对象:
Parse.enableLocalDatastore(this);
ParseACL.setDefaultACL(new ParseACL(), true);
使用示例代码更新:
在我强制关闭应用程序后立即记录输出:
New scores = 0
Local scores = 4
Network scores = 0
New scores = 2
Local scores = 0
Network scores = 0
如您所见,在强制关闭后的网络分数=0
中,我无法查询网络中的任何结果,其中我//查询网络中的新结果
,以使用网络中的新结果更新本地数据存储中的固定对象。即使我在第一次登录后一直连接到internet,这种情况也会发生
但由于我需要将更改从网络同步回本地数据存储,因此我依赖于此查询
那么,在我强制关闭应用程序后,如何在网络中查询添加到当前用户的ACL存储的对象?
更新2
我发现其他人也有同样的问题,这里已经报道过了:
这似乎是新的Parse Android SDK 1.5中的一个bug。一旦确定我的问题与报告的错误有关,我将立即更新此帖子。可能会将密码保存到文件中,如果您在强制关闭后重新打开应用程序,请使用此保存的密码登录?您可以将用户名和密码保存在中,并在用户重新打开应用程序时再次登录 我认为您可以检查
getCurrentUser
是否为null,而不是使用isAuthenticated
boolean isLoggedIn = ParseUser.getCurrentUser() != null;
国家:
ParseUser是否已在此设备上进行身份验证。这将
如果ParseUser是通过登录或注册方法获得的,则为true。
只能保存经过身份验证的ParseUser(使用更改的属性)
删除
getCurrentUser
始终是已注册或登录的用户。因此,如果该值不为null,则表示用户已登录isAuthenticated
只是查看是否从登录/注册中检索到用户对象。例如,如果查询其他ParseUser
对象,则不会对它们进行身份验证
还要注意,当您对当前用户执行注销时,getCurrentUser
将为空
我还注意到,如果您未使用本地数据存储,currentUser.isAuthenticated()
即使在强制关闭应用程序时也会始终返回true
看起来,当您使用本地数据存储时(当前用户在本地检索),对象不再被视为“已验证”,因为在源代码中,该对象不是来自登录或注册的
解析Android变更日志
v1.5.1-2014年5月30日
修复了本地数据存储的各种错误
这个问题实际上是一个本地数据存储错误,今天随着新的Parse Android SDK版本1.5.1的发布,该错误已得到修复。问题是,要再次登录,用户需要互联网连接。但即使我的应用程序在离线时被强制关闭,它也应该仍然可以工作。你说的“仍然可以工作”是什么意思?。要在后台执行操作,您可能需要实现服务。哦,谢谢,但是“工作”意味着我可以在本地数据存储中查询我的ParseObject。但是如果ParseUser没有经过身份验证,我就不能这样做。:-)问题是,要再次登录,用户需要互联网连接。但即使我的应用程序在离线时被强制关闭,它仍然可以工作。谢谢你的详细回答。但问题是,如果启用了“ParseACL.setDefaultACL(new ParseACL(),true);”和本地数据存储,我就无法访问/查询currentUser的ParseObject,这只有在我强制关闭应用程序(或重新启动手机)后currentUser未通过身份验证时才会发生。@sdeff在这种情况下对我来说工作正常。我像您一样设置默认ACL,将一个对象固定到本地数据源,强制关闭应用程序并启动它,我可以从本地数据源查询它们。你会得到一个错误还是没有结果?您可能正在执行此操作,但请确保在查询之前解析本地数据存储中的查询调用。我的解析查询调用本地数据存储中的查询调用。一切都很好,即使我的手机启用了飞行模式。就在我强制关闭之后,我将不会得到任何结果(但不会出现错误)。很高兴知道它应该能工作,非常感谢您的测试!我会重新检查我的代码,看看我是否做错了什么。你能检查一下我添加到问题中的代码吗。问题发生在我查询来自网络的新结果以使用来自网络的新结果更新本地数据存储中的固定对象时。但是我仍然没有解决方法:-(@sdeff是的,我会在有机会的时候看一看。希望其他人或你自己能解决它。最近很忙。回到这里,SDK中还有另一个错误,因为它在v1.6.0中得到了纠正。所以即使你运行1.5.1,你也可能会遇到这个问题。
New scores = 0
Local scores = 4
Network scores = 0
New scores = 2
Local scores = 0
Network scores = 0
boolean isLoggedIn = ParseUser.getCurrentUser() != null;