Android 尝试在片段之间传递数据时出现空指针异常
我试图通过主_活动在一个片段到另一个片段之间传递数据。 在这样做的时候,我可以看到它是有效的(多亏了Log.d(…),但是在我的值变为null之后,我得到了一个null指针异常 我的代码主要活动:Android 尝试在片段之间传递数据时出现空指针异常,android,kotlin,android-fragments,Android,Kotlin,Android Fragments,我试图通过主_活动在一个片段到另一个片段之间传递数据。 在这样做的时候,我可以看到它是有效的(多亏了Log.d(…),但是在我的值变为null之后,我得到了一个null指针异常 我的代码主要活动: class MainActivity : AppCompatActivity(), Communicator { private lateinit var binding: ActivityMainBinding override fun onCreate(savedInstanc
class MainActivity : AppCompatActivity(), Communicator {
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = DataBindingUtil.setContentView(this,R.layout.activity_main)
// Keyboard hidden when app start
window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN)
}
override fun passDataComCategoryId(input: String) {
val bundle = Bundle()
bundle.putString("selectedCategoryId", input)
val transaction = this.supportFragmentManager.beginTransaction()
val frag2 = GameFragment()
frag2.arguments = bundle
transaction.replace(R.id.myNavHostFragment,frag2)
transaction.commit()
}
标题片段(片段1):
配子片段(片段2):
当我在数据传递后记录该值时,我看到了这一点(如果我没有捕捉到它,则会出现null异常):
编辑:空指针异常如下所示:
2021-01-16 01:13:36.921 7517-7517/be.adembacaj.kuizuv2 E/AndroidRuntime: FATAL EXCEPTION: main
Process: be.adembacaj.kuizuv2, PID: 7517
java.lang.NullPointerException
at be.adembacaj.kuizuv2.GameFragment.onCreateView(GameFragment.kt:51)
at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2698)
at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:320)
at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1187)
at androidx.fragment.app.FragmentManager.addAddedFragments(FragmentManager.java:2224)
at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:1997)
at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:1953)
at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:1849)
at androidx.fragment.app.FragmentManager$4.run(FragmentManager.java:413)
at android.os.Handler.handleCallback(Handler.java:808)
at android.os.Handler.dispatchMessage(Handler.java:101)
at android.os.Looper.loop(Looper.java:166)
at android.app.ActivityThread.main(ActivityThread.java:7529)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:245)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:921)
有人能告诉我吗?如果您使用的是
NavHostFragment
,那么您永远不应该执行手动FragmentTransaction
-删除您的整个passDataComCategoryId
方法
相反,将您的包传递到导航()
:
请把这张照片贴出来NullPointerException@ZainNullpointerException Added堆栈跟踪显示错误发生在GameFragment.kt的第51行,您似乎已经在上面切断了该行。但您可能正试图对不在当前布局中的视图使用合成视图引用。@Tenfour04第51行是:val selectedCategoryId:String?=参数?.getString(“selectedCategoryId”)似乎使用Nav架构组件。。为什么要手动执行该事务请注意,导航有一个名为的功能,该功能使该类型安全,因此,如果不传入所需的参数,就无法导航到您的
GameFragment
。
class GameFragment : Fragment() {
/**
* Lazily initialize our [GameViewModel].
*/
private val viewModel: GameViewModel by lazy {
ViewModelProvider(this).get(GameViewModel::class.java)
}
/**
* Inflates the layout with Data Binding, sets its lifecycle owner to the GameViewModel
* to enable Data Binding to observe LiveData, and sets up the RecyclerView with an adapter.
*/
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
val binding = FragmentGameBinding.inflate(inflater)
// Allows Data Binding to Observe LiveData with the lifecycle of this Fragment
binding.lifecycleOwner = this
// Giving the binding access to the GameViewModel
binding.viewModel = viewModel
//variables
val red = Color.parseColor("#FF0000")
val green = Color.parseColor("#008000")
val white = Color.parseColor("#FFFFFF")
var score = 0
var lives = 3
lateinit var comm: Communicator
val selectedCategoryId: String? = arguments?.getString("selectedCategoryId")
Log.d("idkk", selectedCategoryId.toString())
viewModel.getRandomQuizQuestion(selectedCategoryId.toString())
binding.submitButton.isEnabled = false
..........
}
}
2021-01-16 00:37:37.166 6565-6565/be.adembacaj.kuizuv2 D/idkk: 1
2021-01-16 00:37:37.313 6565-6565/be.adembacaj.kuizuv2 D/idkk: null
2021-01-16 01:13:36.921 7517-7517/be.adembacaj.kuizuv2 E/AndroidRuntime: FATAL EXCEPTION: main
Process: be.adembacaj.kuizuv2, PID: 7517
java.lang.NullPointerException
at be.adembacaj.kuizuv2.GameFragment.onCreateView(GameFragment.kt:51)
at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2698)
at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:320)
at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1187)
at androidx.fragment.app.FragmentManager.addAddedFragments(FragmentManager.java:2224)
at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:1997)
at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:1953)
at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:1849)
at androidx.fragment.app.FragmentManager$4.run(FragmentManager.java:413)
at android.os.Handler.handleCallback(Handler.java:808)
at android.os.Handler.dispatchMessage(Handler.java:101)
at android.os.Looper.loop(Looper.java:166)
at android.app.ActivityThread.main(ActivityThread.java:7529)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:245)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:921)
binding.buttonStart.setOnClickListener {
val category = (binding.spinnerQuizCategory.selectedItemPosition + 1).toString())
val bundle = Bundle()
bundle.putString("selectedCategoryId", input)
view?.findNavController()?.navigate(
R.id.action_titleFragment_to_gameFragment,
bundle)
}