首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >重新运行该应用程序后,Butternache8.4.0找不到视图。它会得到一个NullPointerException

重新运行该应用程序后,Butternache8.4.0找不到视图。它会得到一个NullPointerException
EN

Stack Overflow用户
提问于 2016-11-16 20:45:53
回答 4查看 1.2K关注 0票数 16

在Android Studio中重新运行应用程序后,Butterknife.bind(this)再也找不到视图了。到目前为止,我找到的唯一可靠的解决方案是通过Cleaning/Rebuilding Project并再次运行它。然后,它再次查找视图,直到下一次重新运行。到目前为止,这是令人难以置信的恼人的,重建至少需要两分钟。

我有以下build.gradle

代码语言:javascript
复制
android {

compileSdkVersion 24
buildToolsVersion "25.0.0"
defaultConfig {
    applicationId "xx"
    minSdkVersion 21
    targetSdkVersion 24
    versionCode x
    versionName "xxx"
    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    jackOptions {
        enabled true
    }
}
buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

    }
}
packagingOptions {
    exclude 'META-INF/NOTICE' 
    exclude 'META-INF/LICENSE' 
}
compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
}
}

dependencies {
    annotationProcessor 'com.jakewharton:butterknife-compiler:8.4.0'
    compile 'com.jakewharton:butterknife:8.4.0'
    androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.2'
    androidTestCompile 'com.android.support.test:runner:0.5'
    androidTestCompile 'com.android.support:support-annotations:24.2.1'
    compile 'com.android.support:appcompat-v7:24.2.1'
    compile 'com.android.support:design:24.2.1'
    compile 'com.android.support:support-v13:24.2.1'
    compile 'com.android.support:support-v4:24.2.1'
    compile 'com.android.support.test.espresso:espresso-idling-resource:2.2.2'

}

我也在使用构建工具com.android.tools.build:gradle:2.2.2

使用Butterknife.setDebug(true),我得到了以下内容:

代码语言:javascript
复制
D/ButterKnife: Looking up binding for xx.LoginFragment
D/ButterKnife: Not found. Trying superclass xx.BaseFragment
D/ButterKnife: Not found. Trying superclass android.app.Fragment
D/ButterKnife: MISS: Reached framework class. Abandoning search.

BaseFragment执行绑定,LoginFragment对其进行扩展。它看起来像这样

代码语言:javascript
复制
BaseFragment import android.app.Fragment;

 @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View v = inflater.inflate(getLayoutResourceId(), container, false);
        ButterKnife.setDebug(true);
        unbinder = ButterKnife.bind(this, v);
        initViews(v);
        return v;
    }

代码语言:javascript
复制
LoginFragment

@BindView(R.id.inputEmail)
    protected EditText inputEmail;

@Override
    protected void initViews(View v) {
        EditTextFocusListener focusListener = new EditTextFocusListener();
        inputEmail.setOnFocusChangeListener(focusListener);
    }

和堆栈跟踪

代码语言:javascript
复制
  Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.EditText.setOnFocusChangeListener(android.view.View$OnFocusChangeListener)' on a null object reference
            at xx.LoginFragment.initViews(LoginFragment.java:51)
            at xx.BaseFragment.onCreateView(BaseFragment.java:53)

正如我之前所说的,目前唯一可靠的解决方案是对整个项目做一个完整的clean/rebuild。在使用jackCompiler之前,这个结构工作得很好,我不能再禁用它了。代码的主要部分依赖于它。

EN

回答 4

Stack Overflow用户

发布于 2016-11-28 17:03:21

这是一个暂时的解决方案,直到有人有更好的答案或它在稳定频道上发布。

我切换到了canary频道,并将Android Studio升级到了2.3 Canary和com.android.tools.build:gradle:2.3.0-alpha1。其他的一切都和开场白一样。

编辑:我最终决定禁用jackCompiler并回滚到Java1.7。现在稳定了。

代码语言:javascript
复制
jackOptions {
        enabled false
    } 
票数 6
EN

Stack Overflow用户

发布于 2016-11-29 20:35:41

github page说要使用annotationProcessor,但jakewharton.github.io page说要使用apt

基于this所以post,这听起来像是说明与使用的Android Gradle插件版本之间的问题(尽管我使用的是2.2.2,但仍然看到了这个问题)。

android2016年10月更新:你可能不再需要apt和

-apt插件了。版本2.2的Android Gradle插件有一个你应该使用的annotationProcessor配置。

,但是你应该试试这个

试着改变

代码语言:javascript
复制
annotationProcessor 'com.jakewharton:butterknife-compiler:8.4.0'

使用

代码语言:javascript
复制
apt 'com.jakewharton:butterknife-compiler:8.4.0'
票数 4
EN

Stack Overflow用户

发布于 2016-11-25 18:50:28

参见here。请包括以下内容:

Gradle

compile 'com.jakewharton:butterknife:8.4.0'

annotationProcessor 'com.jakewharton:butterknife-compiler:8.4.0'也是。

这可能会对你有帮助。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40632518

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档