Android Butterknife在AOSP棉花糖中不初始化视图,但在棒棒糖中效果很好

Android Butterknife在AOSP棉花糖中不初始化视图,但在棒棒糖中效果很好,android,android-source,android-6.0-marshmallow,butterknife,android-jack-and-jill,Android,Android Source,Android 6.0 Marshmallow,Butterknife,Android Jack And Jill,我正在我的项目中使用butterknife库。当我构建棒棒糖AOSP时,它可以很好地工作,但是相同的代码没有初始化任何东西,所以在NPE被抛出棉花糖AOSP之后 代码如下: public class ErrorLayoutViewHolder extends ViewHolder { @Bind(R.id.error_content_container) View errorContentLayout; @Bind(R.id.error_message) Tex

我正在我的项目中使用butterknife库。当我构建棒棒糖AOSP时,它可以很好地工作,但是相同的代码没有初始化任何东西,所以在NPE被抛出棉花糖AOSP之后

代码如下:

public class ErrorLayoutViewHolder extends ViewHolder {

    @Bind(R.id.error_content_container)
    View errorContentLayout;
    @Bind(R.id.error_message)
    TextView errorMessage;
    @Bind(R.id.retry_button)
    View retryButton;

    public ErrorLayoutViewHolder(final View itemView, View.OnClickListener retryListener) {
        super(itemView);
        retryButton.setOnClickListener(retryListener);
    }
}
这是ViewHolder.java的父类

public class ViewHolder {
    final public View itemView;

    public ViewHolder(View itemView) {
        this.itemView = itemView;
        itemView.setTag(this);
        ButterKnife.bind(this, itemView);
    }
}
 retryButton.setOnClickListener(retryListener);
这是stacktrace:

AndroidRuntime: java.lang.NullPointerException: Attempt to invoke     virtual method 'void  android.view.View.setOnClickListener(android.view.View$OnClickListener)' on a null object reference
02-25 20:38:57.538  5922  5922 E AndroidRuntime:    at com.micromax.aroundyou.model.ui.viewholders.ErrorLayoutViewHolder.<init>(ErrorLayoutViewHolder.java:38)

有什么问题吗?

我认为您应该将视图转换为按钮或您正在使用的任何自定义视图。 你有没有试着使用

@OnClick(R.id.retry_按钮)void foo(){
//TODO按钮逻辑
}


??这样,您根本不关心视图的类。

您应该调用
ButterKnife.bind(This,itemView)在第38行butterknife.bind之前(此,itemView);在第38行之前调用的父类构造函数中,则应该在父类中有bind语句。您所做的类似于尝试从父类分配子类变量!问题是,这段代码在棒棒糖aosp中运行良好,但在棉花糖aospoh中运行不好。。那么我相信这是图书馆的创作者应该关注的。您是否尝试过在他们的github repo上提出问题?但是,当我删除按钮并尝试更改textview(errorMessage)的可见性时,它也会抛出NPEDid。当您尝试显示errorMessage时,是否检查errorMessage是否为null?如果确定它不为空,请尝试以下操作:
errorMessage.setText(String.valueOf(yourror))
。如果这不是问题,那么检查你的布局,确保你有你试图绑定的所有东西的视图。问题是,这段代码在棒棒糖aosp中运行良好,但在棉花糖aosp中运行不正常。最近,我发现在棉花糖中使用了jack编译器,所以butterknife不起作用。我在android studio gradle文件中也做了同样的事情。我加了一句话:UseJackTrue。如何解决这个问题?