在带有片段的多模块项目中使用ButterKnife时出现NullPointerException

时间:2017-04-11 06:21:13

标签: android module nullpointerexception fragment butterknife

当应用程序在后退几分钟后恢复时,我收到exclude-result-prefixes="#all"

我的root buildscript:

java.lang.NullPointerException: Attempt to invoke virtual method 'void android.view.View.setVisibility(int)' on a null object reference

我的图书馆模块gradle有:

dependencies {
    classpath 'com.android.tools.build:gradle:2.3.0'
    classpath 'net.researchgate:gradle-release:2.4.0'
    classpath 'com.jakewharton:butterknife-gradle-plugin:8.5.1'
}

在我正在恢复的片段中正确绑定视图, 但不知何故,恢复应用程序时绑定会丢失。

apply plugin: 'com.jakewharton.butterknife'

dependencies {
  compile fileTree(dir: 'libs', include: ['*.jar'])
  compile 'com.jakewharton:butterknife:8.5.1'
  annotationProcessor 'com.jakewharton:butterknife-compiler:8.5.1'
  testCompile 'junit:junit:4.12'
}

我没有使用proguard,并且在viewPager中更改页面期间的某些情况下也会抛出异常。 viewPager和recyclerView都是按时为空的。

此处抛出异常:

@BindView(R2.id.recyclerView) RecyclerView recyclerView;
@BindView(R2.id.viewPager) ViewPager viewPager;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
    View view = inflater.inflate(getFragmentLayoutId(), container, false);
    unbinder = ButterKnife.bind(this, view);

    return view;
}

@Override
public void onDestroyView()
{
    super.onDestroyView();

    if (unbinder != null)
    {
        unbinder.unbind();
    }
}

我错过了什么,我按照如何逐行实施它? :/

祝你好运,   Henric

2 个答案:

答案 0 :(得分:0)

您是否尝试包含默认的bindview又名R而不是使用库?

答案 1 :(得分:-1)

可能是因为Fragment取决于Activity context并且没有自己的context。因此,您必须ButterKnife.bind(this, view); Activity Fragment开始@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); checkRunTimePermission(); } 。希望它有所帮助:)