Android 为什么在尝试访问Box后出现异常?

Android 为什么在尝试访问Box后出现异常?,android,box-api,Android,Box Api,几天前,我问如何保留Box令牌()。现在,当用户想要访问他的Box帐户时,我使用此代码来配置BoxAndroidClient: client=newboxandroidclient(C,S); authenticate(loadAuth())//loadAuth()返回BoxAndroidAuthData对象 在获得身份验证数据后的短时间内,它工作良好。但大约一个小时后,我得到了一个authfactalfailureexception: 07-06 17:21:01.841:W/System.

几天前,我问如何保留Box令牌()。现在,当用户想要访问他的Box帐户时,我使用此代码来配置
BoxAndroidClient

client=newboxandroidclient(C,S);
authenticate(loadAuth())//loadAuth()返回BoxAndroidAuthData对象
在获得身份验证数据后的短时间内,它工作良好。但大约一个小时后,我得到了一个
authfactalfailureexception

07-06 17:21:01.841:W/System.err(3647):com.box.boxjavalibv2.exceptions.authfatafailureexception
07-06 17:21:01.841:W/System.err(3647):位于com.box.boxjavalibv2.authorization.OAuthDataController.doRefresh(OAuthDataController.java:275)
07-06 17:21:01.841:W/System.err(3647):位于com.box.boxjavalibv2.authorization.OAuthDataController.refresh(OAuthDataController.java:191)
07-06 17:21:01.841:W/System.err(3647):位于org.redscorpio.cloudtest.network.Box$2$1.run(Box.java:71)
第71行是

client.getOAuthDataController().refresh();
但每次我需要进入盒子时都会发生:

client.getFoldersManager().getFolderItems(current.getId(),LIST_REQUEST()).getEntries();
client.getFoldersManager().getFolder(“0”,默认_请求);
我怀疑我的代币在某个时候会失效,但我不知道为什么它不能被更新,为什么它会在这么短的时间后发生。

我能做些什么来防止这种情况?

当用户登录并接受您的应用程序的授权时,您可以将授权代码交换为访问令牌和刷新令牌(响应如下所示)。您的令牌失效的原因是访问令牌在一小时后过期。您可以将有效期为14天的refresh_令牌交换为另一个1小时访问令牌。这就是为什么您希望应用程序同时存储access_令牌和refresh_令牌,确保用户在14天后返回应用程序时只需重新验证

将刷新\u令牌用于另一个访问\u令牌将始终返回其中一个(刷新+访问)

{ “访问令牌”:“T9CE5ASGNUYCCQIZFOWJFHVVQHJL”, “expires_in”:3600, “令牌类型”:“承载者”, “刷新令牌”:“J7rxTiWOHMoSC1isKZKBZWizoRXjkQzig5C6jFgCVJ9bUnsUfGMinKBDLZWP9BgR”
}我不太清楚到底发生了什么事。sdk会自动刷新令牌。但是,每次刷新令牌时,实际上会得到一个新的刷新令牌和新的访问令牌,旧的刷新令牌将不再有效。因此,基本上最简单的方法可能是在每次api调用成功时更新存储的OAuth令牌对象

同时,您能否再次检查(可能添加一些日志)存储的刷新令牌和访问令牌是否是最新的? 您可以在令牌刷新代码中注销访问令牌: com.box.boxjavalibv2.authorization.OAuthDataController类,doRefresh()方法。
在进行api调用的地方:com.box.boxjavalibv2.authorization.OAuthAuthorization类,getAuthString()方法。

我被告知api自动负责重新验证/刷新。我现在该怎么办?我仍然不知道如何处理这个例外。还有一件事:我如何监听自动令牌刷新或身份验证之类的事件?感谢您的建议,我可能已经忘记了在每次刷新时保存令牌(可能我忘记了一些事件)。明天我将尝试它(可能通过添加侦听器来修改sdk代码),并报告它是否有效。是的。这正是保存refreshrd令牌的问题(我的错)。谢谢你的帮助!