android - 适用于 Android 的 AWS Amplify - 无法解析符号 'AmplifyModelProvider'

标签 android amazon-web-services aws-amplify datastore

大家好,

我正在实现AWS Amplify DataStore for android遵循文档,基本上,当我尝试根据 this part of the doc 初始化放大上的数据存储插件时,我收到此错误:

无法解析符号“AmplifyModelProvider”

您可以从我的 gradle 文件和下面的应用程序类中找到代码。

我不是 Android 专家,但我相信这是因为缺少依赖项或者我在 ModelProvider 的初始化或分配过程中做错了什么。但我在互联网上找不到有关此问题或任何可能的解决方案的任何信息。

预先感谢您的帮助。

重现步骤:

  1. 创建新的 Android 项目

  2. 使用 npm 安装 Amplify CLI,npm install -g @aws-amplify/cli

  3. 配置放大,放大配置

  4. 在新的 Android 项目根文件夹中,运行 amplify init, amplify init

  5. 在新的 Android 项目根文件夹中,运行 amplify add auth,amplify add auth,添加身份验证

  6. 创建Android应用程序类

  7. 将 Android 应用程序类添加到 AndroidManifest.xml

  8. 尝试添加数据存储插件以增强应用程序类的 onCreate 方法

我已经尝试了以下解决方案:

  1. 清洁项目

  2. 重建项目

  3. 运行Make项目

  4. 关闭并再次打开 Android Studio

AndroidManifest.xml:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.bakeano.htejobs">

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

    <application
        android:name=".MyApplication"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

MyApplication.java

package com.bakeano.htejobs;

import android.app.Application;
import android.util.Log;

import com.amazonaws.mobile.client.AWSMobileClient;
import com.amazonaws.mobile.client.Callback;
import com.amazonaws.mobile.client.UserStateDetails;
import com.amplifyframework.api.aws.AWSApiPlugin;
import com.amplifyframework.core.Amplify;
import com.amplifyframework.core.model.ModelProvider;
import com.amplifyframework.datastore.AWSDataStorePlugin;

public class MyApplication extends Application {

    @Override
    public void onCreate() {
        super.onCreate();

        // AWSMobileClient initialization
        AWSMobileClient.getInstance().initialize(getApplicationContext(), new Callback<UserStateDetails>() {
            @Override
            public void onResult(UserStateDetails result) {
                try {
                    ModelProvider modelProvider = AmplifyModelProvider.getInstance(); // Error on this line !!!
                    Amplify.addPlugin(AWSDataStorePlugin.forModels(modelProvider));
                    Amplify.addPlugin(new AWSApiPlugin());
                    Amplify.configure(getApplicationContext());
                } catch (Exception e) {
                    Log.e("bakeanoMessage", "Amplify adding plugins Exception: " + e.getMessage(), e);
                }
            }

            @Override
            public void onError(Exception e) {
                Log.e("bakeanoMessage", "AWSMobileClient init Exception: " + e.getMessage(), e);
            }
        });
    }
}

模块等级

apply plugin: 'com.android.application'

android {
    compileSdkVersion 29
    buildToolsVersion "29.0.2"

    defaultConfig {
        applicationId "com.bakeano.htejobs"
        minSdkVersion 23
        targetSdkVersion 29
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }

    compileOptions {
        sourceCompatibility 1.8
        targetCompatibility 1.8
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])

    implementation 'androidx.appcompat:appcompat:1.1.0'
    testImplementation 'junit:junit:4.13'
    androidTestImplementation 'androidx.test.ext:junit:1.1.1'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'

    // androidx constraint layout
    implementation 'androidx.constraintlayout:constraintlayout:2.0.0-beta4'

    // aws amplify framework core
    implementation 'com.amplifyframework:core:0.10.0'

    // AWSMobileClient
    implementation 'com.amazonaws:aws-android-sdk-mobile-client:2.16.11'

    // aws amplify for the drop-in ui
    implementation 'com.amazonaws:aws-android-sdk-auth-userpools:2.16.11'
    implementation 'com.amazonaws:aws-android-sdk-auth-ui:2.16.11'

    // aws amplify api
    implementation 'com.amplifyframework:aws-api:0.10.0'

    // aws amplify data store
    implementation 'com.amplifyframework:aws-datastore:0.10.0'

}

项目 Gradle

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {

    repositories {
        google()
        jcenter()
        mavenCentral()

    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.6.2'

        // amplify tools gradle plugin
        classpath 'com.amplifyframework:amplify-tools-gradle-plugin:0.2.1'


        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

// applying the amplify tools plugin
apply plugin: 'com.amplifyframework.amplifytools'

allprojects {
    repositories {
        google()
        jcenter()
        mavenCentral()

    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

最佳答案

解决方案由Jameson Williams提供:

位于projects github issue platform - issue #370

AmplifyModelProvider 是由 amplify 创建的自动生成的文件 codegen

放大代码生成模型

手动生成后,您需要导入它:

导入 com.amplifyframework.datastore. generated.model.AmplifyModelProvider;

谢谢!!

关于android - 适用于 Android 的 AWS Amplify - 无法解析符号 'AmplifyModelProvider',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61114535/

相关文章:

android - 磁盘上不存在 .apk 文件,但确实存在

amazon-web-services - CDK Route53添加 'A'记录而不删除以前创建的记录

amazon-web-services - 创建异步模型时的单个 SQS 队列与多个 SQS 队列

node.js - 找不到模块 : Error: Can't resolve '../aws-exports' (React-Native Expo Web)

reactjs - Amplify UI 在 React js 中无法正常工作

java - 如何在 Android 中拥有多个服务实例

android - 如何在主屏幕android上实现图标动画?

使用 Robotium 进行 Android 测试注释

json - 如何将 json 存储到/从 aws 参数存储

aws-amplify - AWS Amplify 创建多个具有重复信息的 DynamoDB 表?