标签: aws-sdk-android

java.lang.NoClassDefFoundError:解析失败:Lorg/apache/commons/logging/LogFactory

类似的问题已经被要求了.但是由于Android平台兼容性的变化,这个似乎比以前的更复杂.

这是Pixel和Pixel2的错误日志,已注册Android Beta程序

08-16 13:20:53.146 9630-9630/? E/AndroidRuntime: FATAL EXCEPTION: main
    Process: me.project.android.dev, PID: 9630
    java.lang.NoClassDefFoundError: Failed resolution of: Lorg/apache/commons/logging/LogFactory;
        at com.amazonaws.util.VersionInfoUtils.<clinit>(VersionInfoUtils.java:41)
        at com.amazonaws.util.VersionInfoUtils.c(VersionInfoUtils.java:77)
        at com.amazonaws.ClientConfiguration.<clinit>(ClientConfiguration.java:43)
        //project specific class reference removed
        at android.os.Handler.handleCallback(Handler.java:873)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:193)
        at android.app.ActivityThread.main(ActivityThread.java:6669)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
     Caused by: java.lang.ClassNotFoundException: Didn't find class "org.apache.commons.logging.LogFactory" on path: DexPathList[[zip file "/data/app/me.project.android.dev-0SPRJnc8-4voauRU7Y20zQ==/base.apk"],nativeLibraryDirectories=[/data/app/me.project.android.dev-0SPRJnc8-4voauRU7Y20zQ==/lib/arm64, /data/app/me.project.android.dev-0SPRJnc8-4voauRU7Y20zQ==/base.apk!/lib/arm64-v8a, /system/lib64, /vendor/lib64]]
        at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:134)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
        at com.amazonaws.util.VersionInfoUtils.<clinit>(VersionInfoUtils.java:41) 
        at com.amazonaws.util.VersionInfoUtils.c(VersionInfoUtils.java:77) 
        at com.amazonaws.ClientConfiguration.<clinit>(ClientConfiguration.java:43) 
        //project specific class reference removed
        at android.os.Handler.handleCallback(Handler.java:873) 
        at …
Run Code Online (Sandbox Code Playgroud)

android amazon-web-services android-proguard aws-sdk-android

15
推荐指数
3
解决办法
9391
查看次数

AWS S3 Android SDK 2.11.0

我的代码如下所示:

final AmazonS3Client s3Client = new AmazonS3Client(new BasicAWSCredentials(s3AccessKeyId, s3SecretAccessKey));
final TransferUtility util = TransferUtility.
                    builder().s3Client(s3Client).context(context).build();
Run Code Online (Sandbox Code Playgroud)

从'com.amazonaws:aws-android-sdk-s3:2.7.5'升级到'com.amazonaws:aws-android-sdk-s3:2.11.0'时,即使上传仍然有效:

E/nsferNetworkLossHandler: TransferNetworkLossHandler is not created. Please call `TransferNetworkLossHandler.getInstance(Context)` to instantiate it before retrieving
E/UploadTask: TransferUtilityException: [com.amazonaws.mobileconnectors.s3.transferutility.TransferUtilityException: TransferNetworkLossHandler is not created. Please call `TransferNetworkLossHandler.getInstance(Context)` to instantiate it before retrieving]
Run Code Online (Sandbox Code Playgroud)

当我更改代码以包括TransferNetworkLossHandler时:

TransferNetworkLossHandler.getInstance(context);
final AmazonS3Client s3Client = new AmazonS3Client(new BasicAWSCredentials(s3AccessKeyId, s3SecretAccessKey));
final TransferUtility util = TransferUtility.
                    builder().s3Client(s3Client).context(context).build();
Run Code Online (Sandbox Code Playgroud)

不做任何事情,我再也没有错误。

但是,这不是此错误消息的预期目的。它告诉您使用TransferNetworkLossHandler,但是没有有关如何使用它的文档。

如果上传不起作用,我只想向用户显示错误(例如Toast或AlertDialog)。所以我根本不需要处理程序。但是我也不希望每次都将错误消息写入日志。另外,我也不想使用这种简单的解决方案,即仅获取一个实例而不对其执行任何操作。

在我的情况下,此处理程序的正确用法是什么?

android amazon-s3 awss3transferutility aws-sdk-android

6
推荐指数
1
解决办法
1290
查看次数

如何使用 AWS Amplify Android 强制刷新身份验证令牌?

我找不到有关如何使用 AWS 的 Amplify Android 库刷新访问令牌的信息。

在文档和一些论坛上,有人建议这一切都会自动发生。但就我而言,事实并非如此。

在应用程序中,我使用 Amplify Auth 进行用户身份验证,还使用 ​​Amplify Storage 和 Amplify Predictions。

为了查询我的数据库,我使用DynamoDBMapper适用于 Android 的 AWS 开发工具包。

到目前为止,我已尝试通过以下方式强制刷新令牌:

  1. auth.currentUser
  2. AWSMovileClient.getInstance().tokens
  3. AWSMobileClient.getInstance().currentUserState()
  4. Amplify.Auth.fetchAuthSession()

前三个都不起作用。fetchAuthSession(...)是我现在使用的技术,但它是异步的,需要一些时间才能产生结果。我必须在我的splash activity. 否则,如果它是异步的并且存在对数据库的请求,该请求取决于其结果,则数据库调用将导致NotAuthorizedException.

另外,刷新令牌可以设置为 10 年左右,所以目前这不是问题。问题是旧访问令牌过期后不会创建新的访问令牌,并且我无法执行任何经过身份验证的用户操作。

有没有办法快速检查令牌是否有效——如果无效,则刷新它们?

android amazon-web-services amazon-cognito aws-amplify aws-sdk-android

5
推荐指数
1
解决办法
3972
查看次数