Java AWSMobile vs放大

Java AWSMobile vs放大,java,android,amazon-web-services,aws-amplify-cli,aws-amplify-sdk-android,Java,Android,Amazon Web Services,Aws Amplify Cli,Aws Amplify Sdk Android,我最近从一个项目继承了一些旧代码。它被重新调整为ATAK(Android战术攻击工具包)的插件,需要使用AWS Amplify从AWS S3上传和下载文件。代码的原始创建者使用AWS amplify上传文件 现在,当我尝试在CLI中设置AWS amplify(遵循AWS Mobile开发指南)时,我注意到运行amplify init、amplify add auth、amplify add storage和amplify add API时一切都很顺利。没关系 接下来,我将依赖项添加到build.

我最近从一个项目继承了一些旧代码。它被重新调整为ATAK(Android战术攻击工具包)的插件,需要使用AWS Amplify从AWS S3上传和下载文件。代码的原始创建者使用AWS amplify上传文件

现在,当我尝试在CLI中设置AWS amplify(遵循AWS Mobile开发指南)时,我注意到运行amplify init、amplify add auth、amplify add storage和amplify add API时一切都很顺利。没关系

接下来,我将依赖项添加到build.Gradle(:app)文件中的Gradle文件中。这也很好地工作和同步

现在,代码实际上从未通过AWS.configure部分,如下所示:

Amplify.addPlugin(新的AWSCognitoAuthPlugin());
addPlugin(新的AWSCognitoAuthPlugin());
addPlugin(新的AWSS3StoragePlugin());
com.atakmap.coremap.log.log.i(标记“放大插件配置!”);
com.atakmap.coremap.log.log.i(标记“放大:(plugin==null)=“+Boolean.toString(plugin==null));
放大、配置(插件);
com.atakmap.coremap.log.log.i(标记“Amplify Plugin configure after!!”;
android.util.Log.i(“MyAmplicateApp”,“初始化Amplicate”);
}捕获(异常错误){
android.util.Log.e(“MyAmplicateApp”,“无法初始化Amplicate”,错误);
}
2021-04-13 15:09:58.824 27642-27642/com.atakmap.app.civ E/MyAmplicateApp:无法初始化放大
AmplifyException{message=未能实例化AWSMobileClient,原因=java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“android.content.Context android.content.Context.getApplicationContext()”,recoverySuggestion=有关详细信息,请参阅附加的异常}
位于com.amplifyframework.auth.cognito.AWSCognitoAuthPlugin.configure(AWSCognitoAuthPlugin.java:87)
位于com.framework.core.category.category.configure(category.java:13)
在com.amplifyframework.core.Amplify.configure上(Amplify.java:17)
在com.amplifyframework.core.Amplify.configure(Amplify.java:1)上
在com.atakmap.android.helloworld.recyclerview.RecyclerViewDropDown.(RecyclerViewDropDown.java:200)
在com.atakmap.android.helloworld.HelloWorldDropDownReceiver上。(HelloWorldDropDownReceiver.java:653)
在com.atakmap.android.helloworld.HelloWorldMapComponent.onCreate上(HelloWorldMapComponent.java:254)
在com.atakmap.android.helloworld.plugin.HelloWorldLifecycle.onCreate(HelloWorldLifecycle.java:78)上
位于com.atak.plugins.impl.LifecycleMapComponent$2.run(源文件:142)
位于android.os.Handler.handleCallback(Handler.java:873)
位于android.os.Handler.dispatchMessage(Handler.java:99)
位于android.os.Looper.loop(Looper.java:193)
位于android.app.ActivityThread.main(ActivityThread.java:6669)
位于java.lang.reflect.Method.invoke(本机方法)
位于com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
原因:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“android.content.Context android.content.Context.getApplicationContext()”
位于com.amazonaws.mobile.auth.core.IdentityManager.(IdentityManager.java:207)
位于com.amazonaws.mobile.client.AWSMobileClient$2.run(AWSMobileClient.java:482)
位于com.amazonaws.mobile.client.internal.InternalCallback$1.run(InternalCallback.java:101)
运行(Thread.java:764)
我有几个问题

AWS Mobile似乎已被弃用

如果导致问题的代码涉及AWS Mobile,是否有一种方法可以避免此错误而不必使用AWSMobile,如果是,我应该在哪里查找

AWS Mobile似乎已被弃用

您使用的是AWS Amplify,从2021年起,它是当前一代产品

Amplify.addPlugin(新的AWSCognitoAuthPlugin());
addPlugin(新的AWSCognitoAuthPlugin());
看起来你添加了两次这个插件;您应该只添加一次唯一的插件

在CLI中设置AWS amplify

请注意,放大存储类别需要放大验证类别。您是否也运行了
放大添加验证
?CLI将在app/src/main/res/raw/amplicationconfiguration.json处生成一个文件。检查此文件以确保它包含有关身份验证和存储的信息

最后--

放大配置(插件);
上述配置方法旨在采用Android。我不清楚传递了什么,但它有一个奇怪的名字(“
插件
”)

2021-04-13 15:09:58.824 27642-27642/com.atakmap.app.civ E/MyAmplifyApp: Could not initialize Amplify
    AmplifyException {message=Failed to instantiate AWSMobileClient, cause=java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.Context android.content.Context.getApplicationContext()' on a null object reference, recoverySuggestion=See attached exception for more details}
        at com.amplifyframework.auth.cognito.AWSCognitoAuthPlugin.configure(AWSCognitoAuthPlugin.java:87)
        at com.amplifyframework.core.category.Category.configure(Category.java:13)
        at com.amplifyframework.core.Amplify.configure(Amplify.java:17)
        at com.amplifyframework.core.Amplify.configure(Amplify.java:1)
        at com.atakmap.android.helloworld.recyclerview.RecyclerViewDropDown.<init>(RecyclerViewDropDown.java:200)
        at com.atakmap.android.helloworld.HelloWorldDropDownReceiver.<init>(HelloWorldDropDownReceiver.java:653)
        at com.atakmap.android.helloworld.HelloWorldMapComponent.onCreate(HelloWorldMapComponent.java:254)
        at com.atakmap.android.helloworld.plugin.HelloWorldLifecycle.onCreate(HelloWorldLifecycle.java:78)
        at com.atak.plugins.impl.LifecycleMapComponent$2.run(SourceFile:142)
        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.NullPointerException: Attempt to invoke virtual method 'android.content.Context android.content.Context.getApplicationContext()' on a null object reference
        at com.amazonaws.mobile.auth.core.IdentityManager.<init>(IdentityManager.java:207)
        at com.amazonaws.mobile.client.AWSMobileClient$2.run(AWSMobileClient.java:482)
        at com.amazonaws.mobile.client.internal.InternalCallback$1.run(InternalCallback.java:101)
        at java.lang.Thread.run(Thread.java:764)