NPE@android.support.v7.widget.RecyclerView$LayoutManager.detachViewInternal
从浓缩咖啡2.0切换到2.1时,我遇到了一个奇怪的错误:NPE@android.support.v7.widget.RecyclerView$LayoutManager.detachViewInternal,android,android-espresso,Android,Android Espresso,从浓缩咖啡2.0切换到2.1时,我遇到了一个奇怪的错误: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v7.widget.ChildHelper.detachViewFromParent(int)' on a null object reference at android.support.v7.widget.RecyclerView$LayoutManage
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v7.widget.ChildHelper.detachViewFromParent(int)' on a null object reference
at android.support.v7.widget.RecyclerView$LayoutManager.detachViewInternal(RecyclerView.java:5407)
at android.support.v7.widget.RecyclerView$LayoutManager.detachViewAt(RecyclerView.java:5400)
at android.support.v7.widget.RecyclerView.setAdapterInternal(RecyclerView.java:647)
at android.support.v7.widget.RecyclerView.swapAdapter(RecyclerView.java:594)
at org.ligi.passandroid.ui.PassListActivity.onCreate(PassListActivity.java:161)
at android.app.Activity.performCreate(Activity.java:5990)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106)
at android.support.test.runner.MonitoringInstrumentation.callActivityOnCreate(MonitoringInstrumentation.java:489)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2390)
at android.app.ActivityThread.access$800(ActivityThread.java:151)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5257)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
那里的代码是:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
supportRequestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
setContentView(R.layout.pass_list);
ButterKnife.inject(this);
AXT.at(openFileFAB).setVisibility(Build.VERSION.SDK_INT >= VERSION_STARTING_TO_SUPPORT_STORAGE_FRAMEWORK);
final LinearLayoutManager llm = new LinearLayoutManager(this);
llm.setOrientation(LinearLayoutManager.VERTICAL);
(!!here!!) recyclerView.setLayoutManager(llm);
当我运行应用程序或用espresso 2.0测试它时,它不会崩溃。这是一个奇怪的问题,所以我将首先给出一个对我有效的解决方案,然后尝试解释我认为正在发生的事情 快速修复方法是在测试生成配置中重新声明您的支持库依赖项:
androidTestCompile 'com.android.support:support-v4:22.1.1'
androidTestCompile 'com.android.support:appcompat-v7:22.1.1'
androidTestCompile 'com.android.support:cardview-v7:22.1.1'
androidTestCompile 'com.android.support:gridlayout-v7:22.1.1'
androidTestCompile 'com.android.support:recyclerview-v7:22.1.1'
这将解决您的问题
解释相当奇怪:看起来像是浓缩咖啡contrib:2.1依赖于较旧版本的com.android。支持:recyclerview-v7:22.0.0
。这可以使用Gradleapp:dependenciestask:/gradlew app:dependencies
进行检查。不知何故,此依赖项优先于在compile中声明的依赖项,并将其拉低到较旧的版本:
+--- com.android.support.test.espresso:espresso-contrib:2.1
| +--- com.android.support:recyclerview-v7:22.0.0
| | \--- com.android.support:support-v4:22.0.0
| +--- com.android.support:support-v4:22.0.0
| \--- com.android.support.test.espresso:espresso-core:2.1 (*)
这可以使用app:dependencyInsight任务确认:
/gradlew应用程序:dependencyInsight--配置androidTestCompile--dependency RecycleView-v7
com.android.support:recyclerview-v7:22.0.0
\--- com.android.support.test.espresso:espresso-contrib:2.1
\--- androidTestCompile
结果是测试构建使用了不同(顺序)版本的recyclerview-v7
,结果是有缺陷的。添加androidTestCompile有助于Gradle检测冲突并正确解决冲突。修复后:
com.android.support:recyclerview-v7:22.1.1 (conflict resolution)
\--- androidTestCompile
com.android.support:recyclerview-v7:22.0.0 -> 22.1.1
\--- com.android.support.test.espresso:espresso-contrib:2.1
\--- androidTestCompile
你能在<代码>recyclerView上发布足够的代码吗?谢谢-听起来不错-刚升级过,下班后会试用-如果可以,我会接受