[英]java.lang.IllegalArgumentException: Parameter specified as non-null is null: - android, app starting but crashing straight away
Hey guys I have problem with starting my app, I don't know what is the problem, it just crashes right away when I start it, from the log I suppose it is something about databinding but I don't really know what's wrong right now:C嘿伙计们,我在启动我的应用程序时遇到问题,我不知道是什么问题,当我启动它时它会立即崩溃,从日志中我想这是关于数据绑定的问题,但我真的不知道出了什么问题对现在:C
2020-04-10 22:22:22.716 32624-32624/? I/rss.ing_projec: Late-enabling -Xcheck:jni
2020-04-10 22:22:22.746 32624-32624/? E/rss.ing_projec: Unknown bits set in runtime_flags: 0x8000
2020-04-10 22:22:23.053 32624-32624/com.lswarss.ing_project I/Perf: Connecting to perf service.
2020-04-10 22:22:23.070 32624-32624/com.lswarss.ing_project V/Font: Change font:1
2020-04-10 22:22:23.071 32624-32624/com.lswarss.ing_project V/Font: Default family:android.graphics.Typeface@177a2b82
2020-04-10 22:22:23.077 32624-32676/com.lswarss.ing_project E/Perf: Fail to get file list com.lswarss.ing_project
2020-04-10 22:22:23.077 32624-32676/com.lswarss.ing_project E/Perf: getFolderSize() : Exception_1 = java.lang.NullPointerException: Attempt to get length of null array
2020-04-10 22:22:23.077 32624-32676/com.lswarss.ing_project E/Perf: Fail to get file list com.lswarss.ing_project
2020-04-10 22:22:23.078 32624-32676/com.lswarss.ing_project E/Perf: getFolderSize() : Exception_1 = java.lang.NullPointerException: Attempt to get length of null array
2020-04-10 22:22:23.156 32624-32624/com.lswarss.ing_project W/rss.ing_projec: Accessing hidden method Landroid/view/View;->computeFitSystemWindows(Landroid/graphics/Rect;Landroid/graphics/Rect;)Z (greylist, reflection, allowed)
2020-04-10 22:22:23.157 32624-32624/com.lswarss.ing_project W/rss.ing_projec: Accessing hidden method Landroid/view/ViewGroup;->makeOptionalFitsSystemWindows()V (greylist, reflection, allowed)
2020-04-10 22:22:23.213 32624-32624/com.lswarss.ing_project V/FlingOptimizerScroller: FlingOptimizerOverScroller Init
2020-04-10 22:22:23.251 32624-32624/com.lswarss.ing_project D/AndroidRuntime: Shutting down VM
2020-04-10 22:22:23.253 32624-32624/com.lswarss.ing_project E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.lswarss.ing_project, PID: 32624
java.lang.RuntimeException: Failed to call observer method
at androidx.lifecycle.ClassesInfoCache$MethodReference.invokeCallback(ClassesInfoCache.java:226)
at androidx.lifecycle.ClassesInfoCache$CallbackInfo.invokeMethodsForEvent(ClassesInfoCache.java:194)
at androidx.lifecycle.ClassesInfoCache$CallbackInfo.invokeCallbacks(ClassesInfoCache.java:185)
at androidx.lifecycle.ReflectiveGenericLifecycleObserver.onStateChanged(ReflectiveGenericLifecycleObserver.java:37)
at androidx.lifecycle.LifecycleRegistry$ObserverWithState.dispatchEvent(LifecycleRegistry.java:361)
at androidx.lifecycle.LifecycleRegistry.forwardPass(LifecycleRegistry.java:300)
at androidx.lifecycle.LifecycleRegistry.sync(LifecycleRegistry.java:339)
at androidx.lifecycle.LifecycleRegistry.moveToState(LifecycleRegistry.java:145)
at androidx.lifecycle.LifecycleRegistry.handleLifecycleEvent(LifecycleRegistry.java:131)
at androidx.fragment.app.Fragment.performStart(Fragment.java:2735)
at androidx.fragment.app.FragmentStateManager.start(FragmentStateManager.java:365)
at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1194)
at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1356)
at androidx.fragment.app.FragmentManager.moveFragmentToExpectedState(FragmentManager.java:1434)
at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1497)
at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:2625)
at androidx.fragment.app.FragmentManager.dispatchStart(FragmentManager.java:2583)
at androidx.fragment.app.Fragment.performStart(Fragment.java:2739)
at androidx.fragment.app.FragmentStateManager.start(FragmentStateManager.java:365)
at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1194)
at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1356)
at androidx.fragment.app.FragmentManager.moveFragmentToExpectedState(FragmentManager.java:1434)
at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1497)
at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:2625)
at androidx.fragment.app.FragmentManager.dispatchStart(FragmentManager.java:2583)
at androidx.fragment.app.FragmentController.dispatchStart(FragmentController.java:258)
at androidx.fragment.app.FragmentActivity.onStart(FragmentActivity.java:550)
at androidx.appcompat.app.AppCompatActivity.onStart(AppCompatActivity.java:201)
at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1514)
at android.app.Activity.performStart(Activity.java:7838)
at android.app.ActivityThread.handleStartActivity(ActivityThread.java:3398)
at android.app.servertransaction.TransactionExecutor.performLifecycleSequence(TransactionExecutor.java:221)
at android.app.servertransaction.TransactionExecutor.cycleToPath(TransactionExecutor.java:201)
at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:173)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2109)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7682)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:516)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950)
Caused by: java.lang.IllegalArgumentException: Parameter specified as non-null is null: method kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull, parameter data
at com.lswarss.ing_project.adapters.BindingAdaptersKt.bindRecyclerView(Unknown Source:7)
at com.lswarss.ing_project.databinding.PostsFragmentBindingImpl.executeBindings(PostsFragmentBindingImpl.java:125)
2020-04-10 22:22:23.253 32624-32624/com.lswarss.ing_project E/AndroidRuntime: at androidx.databinding.ViewDataBinding.executeBindingsInternal(ViewDataBinding.java:473)
at androidx.databinding.ViewDataBinding.executePendingBindings(ViewDataBinding.java:445)
at androidx.databinding.ViewDataBinding$OnStartListener.onStart(ViewDataBinding.java:1687)
at java.lang.reflect.Method.invoke(Native Method)
at androidx.lifecycle.ClassesInfoCache$MethodReference.invokeCallback(ClassesInfoCache.java:216)
... 41 more
That's the log given by android studio And it have some problems with this class but what wrong with it:那是 android 工作室给出的日志 这个 class 有一些问题,但它有什么问题:
package com.lswarss.ing_project.adapters
import android.view.View
import android.widget.ImageView
import androidx.databinding.BindingAdapter
import androidx.recyclerview.widget.RecyclerView
import com.lswarss.ing_project.R
import com.lswarss.ing_project.domain.PostItem
import com.lswarss.ing_project.fragments.PostsApiStatus
@BindingAdapter("listData")
fun bindRecyclerView(recyclerView: RecyclerView, data: List<PostItem>?){
val adapter = recyclerView.adapter as PostsAdapter
adapter.submitList(data)
}
@BindingAdapter("postApiStatus")
fun bindStatus(statusImageView: ImageView, status: PostsApiStatus?) {
when (status) {
PostsApiStatus.LOADING -> {
statusImageView.visibility = View.VISIBLE
statusImageView.setImageResource(R.drawable.loading_animation)
}
PostsApiStatus.ERROR -> {
statusImageView.visibility = View.VISIBLE
statusImageView.setImageResource(R.drawable.ic_connection_error)
}
PostsApiStatus.DONE -> {
statusImageView.visibility = View.GONE
}
}
}
I was trying to do this application using the app made in udacity course Mars Real Estate App我正在尝试使用 udacity course Mars Real Estate App中制作的应用程序来执行此应用程序
Here is link to my app on github: https://github.com/LSWarss/ing_project The code I have problems with is on branch new_architecture这是 github 上我的应用程序的链接: https://github.com/LSWarss/ing_project我遇到问题的代码在分支 new_architecture
Sory if this is stupid question but I'm new to android and koltlin, or even posting on stack:)对不起,如果这是一个愚蠢的问题,但我是 android 和 koltlin 的新手,甚至在堆栈上发帖:)
Caused by: java.lang.IllegalArgumentException: Parameter specified as non-null is null: method kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull, parameter data
at com.lswarss.ing_project.adapters.BindingAdaptersKt.bindRecyclerView(Unknown Source:7
This is happening because as long as I saw from github, in your PostsFragment
you are not setting the adapter to the recycler view, so it's null
when the binding adapter is trying to access it.发生这种情况是因为只要我从 github 看到,在您的
PostsFragment
中,您没有将适配器设置为回收器视图,因此当绑定适配器尝试访问它时,它是null
。
Also, I noticed this in your master branch:另外,我在您的主分支中注意到了这一点:
viewModel.posts.observe(viewLifecycleOwner, Observer {
posts -> recycler_view_posts.also{
it.layoutManager = LinearLayoutManager(requireContext())
it.setHasFixedSize(true)
it.adapter = PostsAdapter(posts)
}
You don't have to initialize your recycler view each time you get something on observe.每次观察到某些东西时,您不必初始化您的回收站视图。
In onViewCreated()
method from fragment you can set the adapter and the layoutManager (and this will also solve your error if you add it in PostsFragment):在片段的
onViewCreated()
方法中,您可以设置适配器和 layoutManager(如果您在 PostsFragment 中添加它,这也将解决您的错误):
private fun initRecyclerView(){
recycler_view_posts.run{
adapter = PostsAdapter(posts)
layoutManager = LinearLayoutManager(requireContext())
setHasFixedSize(true)
}
}
and then on observe you only have to refresh the content with the approach from new_architecture branch ( adapter.submitList(list)
) or by setting the new list in adapter and calling adapter.notifyDataSetChange()
.然后观察你只需要使用 new_architecture 分支(
adapter.submitList(list)
)的方法或通过在适配器中设置新列表并调用adapter.notifyDataSetChange()
来刷新内容。
change bindRecyclerView
to this:将
bindRecyclerView
更改为:
@BindingAdapter("listData")
fun bindRecyclerView(recyclerView: RecyclerView, data: List<PostItem>?){
val adapter = recyclerView.adapter as PostsAdapter? // changed to nullable type
adapter?.submitList(data)// nullablity checked
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.