Reputation: 11
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
listAdapter = WiFiPeerListAdapter(requireContext(), R.layout.row_devices, peers)
}
causing crash while casting as below:
fun clearPeers() {
peers.clear()
(listAdapter as WiFiPeerListAdapter).notifyDataSetChanged()
}
here list adapter is setListAdapter() from ListFragment() class:
public void setListAdapter(@Nullable ListAdapter adapter) {
boolean hadAdapter = mAdapter != null;
mAdapter = adapter;
if (mList != null) {
mList.setAdapter(adapter);
if (!mListShown && !hadAdapter) {
// The list was hidden, and previously didn't have an
// adapter. It is now time to show it.
setListShown(true, requireView().getWindowToken() != null);
}
}
}
Crash Report:
FATAL EXCEPTION: main Process: com.tsfapps.wifip2p, PID: 29222 java.lang.RuntimeException: Error receiving broadcast Intent { act=android.net.wifi.p2p.CONNECTION_STATE_CHANGE flg=0x24000010 (has extras) } in com.tsfapps.wifip2p.WiFiDirectBroadcastReceiver@b154cba at android.app.LoadedApk$ReceiverDispatcher$Args.lambda$getRunnable$0$LoadedApk$ReceiverDispatcher$Args(LoadedApk.java:1689) at android.app.LoadedApk$ReceiverDispatcher$Args$$ExternalSyntheticLambda0.run(Unknown Source:2) at android.os.Handler.handleCallback(Handler.java:938) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loopOnce(Looper.java:201) at android.os.Looper.loop(Looper.java:288) at android.app.ActivityThread.main(ActivityThread.java:7839) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003) Caused by: java.lang.NullPointerException: null cannot be cast to non-null type com.tsfapps.wifip2p.DeviceListFragment.WiFiPeerListAdapter at com.tsfapps.wifip2p.DeviceListFragment.clearPeers(DeviceListFragment.kt:102) at com.tsfapps.wifip2p.MainActivity.resetData(MainActivity.kt:159) at com.tsfapps.wifip2p.WiFiDirectBroadcastReceiver.onReceive(WiFiDirectBroadcastReceiver.kt:77) at android.app.LoadedApk$ReceiverDispatcher$Args.lambda$getRunnable$0$LoadedApk$ReceiverDispatcher$Args(LoadedApk.java:1679) at android.app.LoadedApk$ReceiverDispatcher$Args$$ExternalSyntheticLambda0.run(Unknown Source:2) at android.os.Handler.handleCallback(Handler.java:938) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loopOnce(Looper.java:201) at android.os.Looper.loop(Looper.java:288) at android.app.ActivityThread.main(ActivityThread.java:7839) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)
I tried to search in Goolge, but not got any proper solution
Upvotes: 0
Views: 81
Reputation: 82
The crash you face is caused by a NullPointerException when cast the listAdapter to WifiPeerListAdaptor . The exception occurs because the listAdapter are null the time of casting.
To fix the crash listAdapter is properly initialized before calling the clearPeer() function.
Here is an Example
private lateinit var listAdapter: WiFiPeerListAdapter
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
listAdapter = WiFiPeerListAdapter(requireContext(), R.layout.row_devices, peers)
// Other code...
}
fun clearPeers() {
peers.clear()
// Check if listAdapter is initialized
if (::listAdapter.isInitialized) {
listAdapter.notifyDataSetChanged()
}
}
Upvotes: 0