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" />
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が機能していることを確認できます。
Fragmentでこのライブラリを使用しましたが、NPEがあります。私のコードは:
ButterKnife.bind(view);
しかし、それは間違っていました。ライブラリは2つのオブジェクトを知る必要があります。
1)ターゲット-アノテーション付き@BindView
2)ソース-ビュー付き
書くのは正しいでしょう:
ButterKnife.bind(this, view);
このとき-あなたのフラグメント、およびビュー-このフラグメントのビュー。
私にとって問題は、私が使用していたことでした
annotationProcessor 'com.jakewharton:butterknife-compiler:8.7.0'
の代わりに
apt 'com.jakewharton:butterknife-compiler:8.7.0
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
}
}
このようにbuild.gradleファイルにButterknifeを設定し、
compile("com.jakewharton:butterknife:8.5.1")
annotationProcessor "com.jakewharton:butterknife-compiler:8.5.1"
わたしにはできる。
Android Studioの依存関係管理からバターナイフを追加したからであり、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'
を追加する必要がありました
Kotlinを使用する場合:
モジュールアプリでこの依存関係を使用してください:
dependencies {
implementation 'com.jakewharton:butterknife:10.0.0'
kapt 'com.jakewharton:butterknife-compiler:10.0.0'
}
あなたのgradleファイルにannotationProcessor 'com.jakewharton:butterknife-compiler:8.6.0'
を追加してください
ジェイクウォートンから
はい、そのプラグインはもう必要ありません。 Android Gradleプラグインに組み込まれている 'butterknife-compiler'アーティファクトに対して、annotationProcessorを既に使用しています。
その後、解決策はaptクラスパス「com.neenbedankt.gradle.plugins:Android-apt:1.8」を削除することです
プロジェクトを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'
}
この質問は古いですが、これが誰かの助けになることを願っています。