web-dev-qa-db-ja.com

ButterKnife 8.0.1が機能しない

butterknife 8.0.1を使用していますが、nullpointerexceptionが表示されます。

この行はbuild.gradeファイルにあります:compile 'com.jakewharton:butterknife:8.0.1'

これは私のMain Class:です(適切にインクルードを書きました)

import butterknife.BindView;
import butterknife.ButterKnife;

public class MainActivity extends BaseActivity {

    @BindView(R.id.MainScreenTextView) TextView mainText;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ButterKnife.bind(this);

        **mainText.setText("Butter knife is working fine");**
    }

そしてこれはMainActivity.xmlです:

<Android.support.design.widget.AppBarLayout
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:theme="@style/AppTheme.AppBarOverlay">

    <Android.support.v7.widget.Toolbar
        Android:id="@+id/toolbar"
        Android:layout_width="match_parent"
        Android:layout_height="?attr/actionBarSize"
        Android:background="?attr/colorPrimary"
        app:popupTheme="@style/AppTheme.PopupOverlay" />

</Android.support.design.widget.AppBarLayout>

<LinearLayout
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:gravity="center_vertical"
    Android:orientation="vertical">

    <TextView
        Android:id="@+id/MainScreenTextView"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:text="This is the Main Screen"
        Android:textColor="#000000"
        Android:background="#666666"
        Android:padding="5dp"
        Android:textSize="20dp"/>
</LinearLayout>

<Android.support.design.widget.FloatingActionButton
    Android:id="@+id/fab"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:layout_gravity="bottom|end"
    Android:layout_margin="@dimen/fab_margin"
    Android:src="@Android:drawable/ic_dialog_email" />
58

readme ごとに、生成されたコードが自動的に生成されるようにbutterknife-compilerを含める必要があります。

buildscript {
  repositories {
    mavenCentral()
   }
  dependencies {
    classpath 'com.neenbedankt.gradle.plugins:Android-apt:1.8'
  }
}

apply plugin: 'com.neenbedankt.Android-apt'

dependencies {
  compile 'com.jakewharton:butterknife:8.0.1'
  apt 'com.jakewharton:butterknife-compiler:8.0.1'
}

これがないと、ロードされる生成コードが存在しないため、フィールドが設定されません。

ButterKnife.setDebug(true)を呼び出してLogcatを調べると、ButterKnifeが機能していることを確認できます。

147
Jake Wharton

Fragmentでこのライブラリを使用しましたが、NPEがあります。私のコードは:

ButterKnife.bind(view);

しかし、それは間違っていました。ライブラリは2つのオブジェクトを知る必要があります。
1)ターゲット-アノテーション付き@BindView
2)ソース-ビュー付き

書くのは正しいでしょう:

ButterKnife.bind(this, view);

このとき-あなたのフラグメント、およびビュー-このフラグメントのビュー。

6
Dmitry

私にとって問題は、私が使用していたことでした

annotationProcessor 'com.jakewharton:butterknife-compiler:8.7.0'

の代わりに

 apt 'com.jakewharton:butterknife-compiler:8.7.0
5
SpyZip
App Level(build.gradle)

apply plugin: 'Android-apt'
dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    compile 'com.Android.support:appcompat-v7:24.2.1'
    testCompile 'junit:junit:4.12'
    compile 'com.jakewharton:butterknife:8.4.0'
    apt 'com.jakewharton:butterknife-compiler:8.4.0'
}


Project Level(build.gradle)

buildscript {
    repositories {
        jcenter()
    }
    dependencies {

        classpath 'com.neenbedankt.gradle.plugins:Android-apt:1.8'
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}
5
V.Soni

このようにbuild.gradleファイルにButterknifeを設定し、

compile("com.jakewharton:butterknife:8.5.1")
annotationProcessor "com.jakewharton:butterknife-compiler:8.5.1"

わたしにはできる。

3
Luna Kong

Android St​​udioの依存関係管理からバターナイフを追加したからであり、Butterknife Webサイトからgradle行をコピーして貼り付けるのではなく、この問題もありました。そこで、compile 'com.jakewharton:butterknife:8.5.1' annotationProcessor 'com.jakewharton:butterknife-compiler:8.5.1'だけでなくcompile 'com.jakewharton:butterknife:8.5.1'を追加する必要がありました

2
ViliusK

Kotlinを使用する場合:

モジュールアプリでこの依存関係を使用してください:

dependencies {
   implementation 'com.jakewharton:butterknife:10.0.0'
   kapt 'com.jakewharton:butterknife-compiler:10.0.0'
}
0
wiz165

あなたのgradleファイルにannotationProcessor 'com.jakewharton:butterknife-compiler:8.6.0'を追加してください

0

ジェイクウォートンから

はい、そのプラグインはもう必要ありません。 Android Gradleプラグインに組み込まれている 'butterknife-compiler'アーティファクトに対して、annotationProcessorを既に使用しています。

その後、解決策はaptクラスパス「com.neenbedankt.gradle.plugins:Android-apt:1.8」を削除することです

0
Pablo Cegarra

プロジェクトをGradleバージョン3.0.1に更新した後、この問題に直面しました。 Gradle appファイルに次の行を含めるだけで修正できました。

annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'

最終結果は次のとおりです。

    dependencies {
        compile fileTree(include: ['*.jar'], dir: 'libs')
        androidTestCompile('com.Android.support.test.espresso:espresso-core:2.2.2', {
            exclude group: 'com.Android.support', module: 'support-annotations'
        })

        ...

        compile 'com.jakewharton:butterknife:8.8.1'
        annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'
    }

この質問は古いですが、これが誰かの助けになることを願っています。

0
GuilhermeFGL