Android Dropbox API v2,验证后尝试加载文件时出现InvalidAccessTokenException
我在尝试将文件上载到Dropbox时遇到InvalidAccessTokenException 对于授权,我使用下一个算法:Android Dropbox API v2,验证后尝试加载文件时出现InvalidAccessTokenException,android,dropbox-api,Android,Dropbox Api,我在尝试将文件上载到Dropbox时遇到InvalidAccessTokenException 对于授权,我使用下一个算法: Auth.startOAuth2Authentication(context, APP_KEY); //granting access //previous activity is reopened String accessToken = Auth.getOAuth2Token(); DbxRequestConfig requestConfig = DbxReque
Auth.startOAuth2Authentication(context, APP_KEY);
//granting access
//previous activity is reopened
String accessToken = Auth.getOAuth2Token();
DbxRequestConfig requestConfig = DbxRequestConfig.newBuilder(CLIENT_ID)
.withHttpRequestor(OkHttp3Requestor.INSTANCE)
.build();
DbxClientV2 client = new DbxClientV2(requestConfig, accessToken);
client.files().uploadBuilder(ADDRESS_IN_DROPBOX)
.uploadAndFinish(inputStream);
返回InvalidAccessTokenException
也许我做错了什么
也可能Auth.getOAuth2Token()返回Auth代码而不是访问代码(从方法名来看这有点明显),但是在已知Auth代码的情况下如何获取访问代码呢
PS我使用了Android项目作为示例,并执行了与示例中完全相同的auth
编辑-----------------------------------------------------------------------------------------------
只有在从Dropbox网页的帐户设置中取消对应用程序的访问后,问题才会出现。您注意到:
只有在从Dropbox网页的帐户设置中取消对应用程序的访问后,问题才会发生
在这种情况下,这是意料之中的。如果用户撤销令牌(例如通过断开应用程序的链接),则使用该令牌尝试的任何进一步API调用都将失败,并出现此异常。您应该让代码捕获此异常,并提示用户如果想继续使用,请重新链接应用程序。您注意到:
只有在从Dropbox网页的帐户设置中取消对应用程序的访问后,问题才会发生
在这种情况下,这是意料之中的。如果用户撤销令牌(例如通过断开应用程序的链接),则使用该令牌尝试的任何进一步API调用都将失败,并出现此异常。您应该让代码捕获此异常,并提示用户如果想继续使用应用程序,请重新链接该应用程序。我在代码中发现问题。 我在Dropbox中使用了DropboxClientFactory,其中客户端init如下所示
public static void init(String accessToken) {
if (sDbxClient == null)) {
DbxRequestConfig requestConfig = DbxRequestConfig.newBuilder("ID")
.withHttpRequestor(OkHttp3Requestor.INSTANCE)
.build();
sDbxClient = new DbxClientV2(requestConfig, accessToken);
}
}
public static void init(String accessToken) {
if (sDbxClient == null || !accessToken.equals(accessCode)) {
DbxRequestConfig requestConfig = DbxRequestConfig.newBuilder("ID")
.withHttpRequestor(OkHttp3Requestor.INSTANCE)
.build();
sDbxClient = new DbxClientV2(requestConfig, accessToken);
}
}
当撤销访问令牌时,由于sDbxClient已初始化,所以未调用初始化进程
所以我向DropboxClientFactory添加了变量accessCode来保存使用过的访问令牌,现在init看起来像这样
public static void init(String accessToken) {
if (sDbxClient == null)) {
DbxRequestConfig requestConfig = DbxRequestConfig.newBuilder("ID")
.withHttpRequestor(OkHttp3Requestor.INSTANCE)
.build();
sDbxClient = new DbxClientV2(requestConfig, accessToken);
}
}
public static void init(String accessToken) {
if (sDbxClient == null || !accessToken.equals(accessCode)) {
DbxRequestConfig requestConfig = DbxRequestConfig.newBuilder("ID")
.withHttpRequestor(OkHttp3Requestor.INSTANCE)
.build();
sDbxClient = new DbxClientV2(requestConfig, accessToken);
}
}
我发现我的代码有问题。 我在Dropbox中使用了DropboxClientFactory,其中客户端init如下所示
public static void init(String accessToken) {
if (sDbxClient == null)) {
DbxRequestConfig requestConfig = DbxRequestConfig.newBuilder("ID")
.withHttpRequestor(OkHttp3Requestor.INSTANCE)
.build();
sDbxClient = new DbxClientV2(requestConfig, accessToken);
}
}
public static void init(String accessToken) {
if (sDbxClient == null || !accessToken.equals(accessCode)) {
DbxRequestConfig requestConfig = DbxRequestConfig.newBuilder("ID")
.withHttpRequestor(OkHttp3Requestor.INSTANCE)
.build();
sDbxClient = new DbxClientV2(requestConfig, accessToken);
}
}
当撤销访问令牌时,由于sDbxClient已初始化,所以未调用初始化进程
所以我向DropboxClientFactory添加了变量accessCode来保存使用过的访问令牌,现在init看起来像这样
public static void init(String accessToken) {
if (sDbxClient == null)) {
DbxRequestConfig requestConfig = DbxRequestConfig.newBuilder("ID")
.withHttpRequestor(OkHttp3Requestor.INSTANCE)
.build();
sDbxClient = new DbxClientV2(requestConfig, accessToken);
}
}
public static void init(String accessToken) {
if (sDbxClient == null || !accessToken.equals(accessCode)) {
DbxRequestConfig requestConfig = DbxRequestConfig.newBuilder("ID")
.withHttpRequestor(OkHttp3Requestor.INSTANCE)
.build();
sDbxClient = new DbxClientV2(requestConfig, accessToken);
}
}
我已经这样做了。捕获异常并再次启动授权过程。但在尝试在授权后立即上载文件之后,出现了另一个InvalidAccessTokenException。我已经这样做了。捕获异常并再次启动授权过程。但在尝试在授权后立即上载文件之后,还有另一个InvalidAccessTokenException。