Библиотека Android Parceler: невозможно найти созданный класс Parcelable

Я пытаюсь использовать библиотеку Parceler в своем проекте Android Studio. Проект состоит из двух модулей, один из которых представляет собой само приложение, а другой представляет собой персональную библиотеку ядра Android, содержащую различные помощники и общие сущности.

Однако я добавил зависимость Parceler в свою базовую библиотеку, потому что она мне там тоже нужна, поэтому в библиотеку build.gradle я добавил следующие строки:

compile "org.parceler:parceler-api:1.0.4"
apt "org.parceler:parceler:1.0.4"

Я не указал эти строки в файле приложения build.gradle, потому что зависимость от Parceler будет импортирована автоматически.

В моем приложении я определил сущность, которая должна быть Parcelable и какая реализация:

@Parcel
public class Course {
    public String name;

    public Course() { /*Required empty bean constructor*/ }

    public Course(String name) {
        this.name = name;
    }
}

Но когда я пытаюсь сделать

Course[] courses = ...retrieved from server...
Parcelable p = Parcels.wrap(courses);

Каркас запускает следующее исключение:

org.parceler.ParcelerRuntimeException: Unable to find generated Parcelable class for [Lit.bmsoftware.lotoapp.network.entity.Course;, verify that your class is configured properly and that the Parcelable class [Lit.bmsoftware.lotoapp.network.entity.Course;$$Parcelable is generated by Parceler.

Я уже прочитал различные сообщения для этого исключения, но я не могу найти решение для моей проблемы.

Кто-нибудь может мне помочь?

Заранее спасибо:)

РЕДАКТИРОВАТЬ: build.gradle файл

plugins {
    id "me.tatarka.retrolambda" version "3.2.4"
}

apply plugin: 'com.android.application'
apply plugin: 'com.neenbedankt.android-apt'

retrolambda {
    jvmArgs '-noverify' // Issues: using Google Play Services causes retrolambda to fail
}

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.2"

    defaultConfig {
        applicationId "it.bmsoftware.lotoapp"
        minSdkVersion 16
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
    }
    signingConfigs {
        release {
            storeFile file("*******.keystore")
            storePassword "********"
            keyAlias "*******"
            keyPassword "*******"
        }
    }
    buildTypes {
        release {
            //noinspection GroovyAssignabilityCheck
            signingConfig signingConfigs.release
            minifyEnabled false
            shrinkResources false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

    repositories {
        mavenCentral()
        mavenLocal()
    }

    dataBinding {
        enabled = true
    }

    // Fixes bug in Data Binding library (Source folders generated at incorrect location)
    //    applicationVariants.all { variant ->
    //        def variantName = variant.name.capitalize()
    //        def inputDir    = "${buildDir}/intermediates/classes/${variant.dirName}"
    //        def sourceDir   = "${buildDir}/generated/source/dataBinding/${variant.dirName}"
    //        def copyTask    = tasks.create(name: "dataBindingFix${variantName}", type: Copy) {
    //            from inputDir
    //            into sourceDir
    //            include '**/*.java'
    //        }
    //        tasks["generate${variantName}Sources"].dependsOn copyTask
    //        variant.addJavaSourceFoldersToModel new File(sourceDir)
    //    }

    return true
}

ext {
    supportLibVersion = '23.1.1'  // variable that can be referenced to keep support libs consistent
}

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

    compile project(':core')

    compile "com.android.support:support-v13:${supportLibVersion}"
    compile "com.android.support:design:${supportLibVersion}"
    //compile "com.android.support:percent:${supportLibVersion}"

    compile "com.android.support:recyclerview-v7:${supportLibVersion}"
    compile "com.android.support:cardview-v7:${supportLibVersion}"

    compile "org.parceler:parceler-api:1.0.4"
    apt "org.parceler:parceler:1.0.4"

    compile 'jp.wasabeef:recyclerview-animators:2.2.0'
}

1 ответ

Решение

Текущая версия (1.0.4) не поддерживает массивы @Parcel аннотированные классы через Parcels служебный класс. Вместо этого я бы предложил использовать List:

List<Course> courses = ...retrieved from server...
Parcelable p = Parcels.wrap(courses);
Другие вопросы по тегам