簡體   English   中英

適用於 Android 的 AWS Amplify - 無法解析符號“AmplifyModelProvider”

[英]AWS Amplify for Android - Cannot resolve symbol 'AmplifyModelProvider'

大家好,

我正在按照文檔為 android 實施 AWS Amplify DataStore ,基本上,當我嘗試根據文檔的這一部分在放大上初始化數據存儲插件時出現此錯誤:

無法解析符號“AmplifyModelProvider”

您可以從我的 gradle 文件和我的應用程序 class 下面找到代碼。

我不是 android 專家,但我相信這是因為缺少依賴關系,或者我在初始化或分配 ModelProvider 期間做錯了什么。 但我無法在互聯網上找到有關此問題或任何可能解決方案的任何信息。

在此先感謝您的幫助。

重現步驟:

  1. 新建 android 工程

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

  3. 配置放大, amplify configure

  4. 在新的 android 項目根文件夾上,運行放大初始化, amplify init

  5. 在新的 android 項目根文件夾上,運行 amplify add auth, amplify add auth , 添加身份驗證

  6. 創建 android 應用程序 class

  7. 將 android 應用程序 class 添加到 AndroidManifest.xml

  8. 嘗試添加數據存儲插件以放大應用程序 class 的 onCreate 方法

我已經嘗試了以下解決方案:

  1. 清潔項目

  2. 重建項目

  3. 運行制作項目

  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);
            }
        });
    }
}

模塊 Gradle

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提供的解決方案:

項目 github 問題平台 - 問題 #370

AmplifyModelProvider 是由 amplify codegen創建的自動生成文件

amplify codegen models

手動生成后,您需要導入它:

import com.amplifyframework.datastore.generated.model.AmplifyModelProvider;

謝謝 !!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM