Конфликт Kotlin c Butterknife

180
10 апреля 2018, 06:28

Есть проект написанный полностью на Java. Решил перевести несколько классов в Kotlin. В проекте используется Butterknife для инициализации различных view-элементов. Но когда к проекту подключаешь Kotlin и все его плагины, то проект начинает выплевывать ошибки NullPointerException. Как я понял Butterknife перестает инициализировать элементы, так как если делать это методом findViewById, то всё работает.

ProductKotlin.kt

package com.example.project
...
import android.arch.persistence.room.*
import android.os.Parcelable
import kotlinx.android.parcel.Parcelize
@Parcelize
@Entity(tableName = "product")
data class Product ( // It's correct
        @PrimaryKey(autoGenerate = true)
        var idProduct:Int,
        var name: String,
        var amount: Int,
        var price: Double,
        var weight: Double,
        var image: String,
        var producer: String
    ) : Parcelable {
            override fun toString(): String {
                return "Product{" +
                        "idProduct=" + idProduct +
                        ", name='" + name + '\'' +
                        ", amount=" + amount +
                        ", price=" + price +
                        ", weight=" + weight +
                        ", image='" + image + '\'' +
                        '}'
            }
            fun log() {
             Log.d("Kotlin", toString());
            }
}

MainActivity.java

...
@BindView(R.id.pager)
protected ViewPager pager;
 ...
private void init_slider() {
        new ProductKotlin(1,"Kotlin",3,4,5,"image","producer").log();
        adapter =  new ViewPagerAdapter(getSupportFragmentManager(), getResources().getStringArray(R.array.tabs), getResources().getStringArray(R.array.tabs).length); 
        pager.setAdapter(adapter); //NULLPointerException
        tabs.setDistributeEvenly(true);
        tabs.setCustomTabColorizer(position -> getResources().getColor(R.color.grey_200));
        tabs.setViewPager(pager);
...
}

bild.gradle

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'org.jetbrains.kotlin.android.extensions'
apply plugin: 'kotlin-kapt'
...
androidExtensions {
    experimental = true
}
...
dependencies {
...
compile "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
...
}
Answer 1

Скорее всего вам надо заменить в build.gradle все annotationProcessor на kapt.

Answer 2

используйте Kotlin Android Extensions.

Можете тут прочитать https://kotlinlang.org/docs/tutorials/android-plugin.html

READ ALSO
Intellij не может найти путь

Intellij не может найти путь

Проект не запускается Выводит как:

196
Реализация HTML 5 в приложение Java

Реализация HTML 5 в приложение Java

Готовлюсь к конкурсу по программированию на JavaВыбрал необычную тему

186
GridLayout Программное размещение фрагментов

GridLayout Программное размещение фрагментов

Программно добавляю фрагменты в GridLayout, фрагменты по нажатию на них удаляются, можно ли сделать так чтобы они построчно тянулись к левому...

183
ConcurrentModificationException в forEach цикле

ConcurrentModificationException в forEach цикле

Имеется многопоточная среда обработки ивент-событийСам поток обработчик:

219