黄油刀8.0.1不起作用
我正在使用nullpointerexception
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" />
根据自述 ,您需要包含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)
来validationButterKnife,并在Logcat中查找。
我在片段中使用这个库,并有NPE。 我的代码是:
ButterKnife.bind(view);
但是这是错的。 图书馆需要知道两个对象:
1)目标 – 带注释@BindView
2)来源 – 有意见
写下是正确的:
ButterKnife.bind(this, view);
当这个 – 你的片段和视图 – 这个片段的视图。
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 } }
对我来说问题是我正在使用
annotationProcessor 'com.jakewharton:butterknife-compiler:8.7.0'
代替
apt 'com.jakewharton:butterknife-compiler:8.7.0
我也有这个问题,只是因为我已经从Android Studio的Dependencypipe理添加了butterknife,而不是从Butterknife网站上复制粘贴gradle。 所以我不得不添加compile 'com.jakewharton:butterknife:8.5.1' annotationProcessor 'com.jakewharton:butterknife-compiler:8.5.1'
而不是只compile 'com.jakewharton:butterknife:8.5.1'
来自杰克·沃顿
是的,这个插件不再需要。 您已经在为Android Gradle插件内置的“butterknife-compiler”工件使用annotationProcessor。
然后解决方法是删除apt classpath com.neenbedankt.gradle.plugins:android-apt:1.8'
Add ` annotationProcessor 'com.jakewharton:butterknife-compiler:8.6.0'` In your gradle file it worked for me