override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
listAdapter = WiFiPeerListAdapter(requireContext(), R.layout.row_devices, peers)
}
在投射时导致崩溃,如下所示:
fun clearPeers() {
peers.clear()
(listAdapter as WiFiPeerListAdapter).notifyDataSetChanged()
}
这里的列表适配器是ListFragment()类中的setListAdapter():
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);
}
}
}
崩溃报告:
致命异常:主要 进程:com.tsfapps.wifip2p,PID:29222 java.lang.RuntimeException:在 com.tsfapps.wifip2p.WiFiDirectBroadcastReceiver@b154cba 中接收广播 Intent { act=android.net.wifi.p2p.CONNECTION_STATE_CHANGE flg=0x24000010 (has extras) } 时出错 在 android.app.LoadedApk$ReceiverDispatcher$Args.lambda$getRunnable$0$LoadedApk$ReceiverDispatcher$Args(LoadedApk.java:1689) 在 android.app.LoadedApk$ReceiverDispatcher$Args$$ExternalSyntheticLambda0.run(未知来源:2) 在 android.os.Handler.handleCallback(Handler.java:938) 在 android.os.Handler.dispatchMessage(Handler.java:99) 在 android.os.Looper.loopOnce(Looper.java:201) 在 android.os.Looper.loop(Looper.java:288) 在 android.app.ActivityThread.main(ActivityThread.java:7839) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003) 引起原因:java.lang.NullPointerException:null无法转换为非空类型com.tsfapps.wifip2p.DeviceListFragment.WiFiPeerListAdapter 在com.tsfapps.wifip2p.DeviceListFragment.clearPeers(DeviceListFragment.kt:102) 在com.tsfapps.wifip2p.MainActivity.resetData(MainActivity.kt:159) 在com.tsfapps.wifip2p.WiFiDirectBroadcastReceiver.onReceive(WiFiDirectBroadcastReceiver.kt:77) 在 android.app.LoadedApk$ReceiverDispatcher$Args.lambda$getRunnable$0$LoadedApk$ReceiverDispatcher$Args(LoadedApk.java:1679) 在 android.app.LoadedApk$ReceiverDispatcher$Args$$ExternalSyntheticLambda0.run(未知来源:2) 在 android.os.Handler.handleCallback(Handler.java:938) 在 android.os.Handler.dispatchMessage(Handler.java:99) 在 android.os.Looper.loopOnce(Looper.java:201) 在 android.os.Looper.loop(Looper.java:288) 在 android.app.ActivityThread.main(ActivityThread.java:7839) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)
我尝试在Goolge中搜索,但没有得到任何合适的解决方案
您遇到的崩溃是由将 listAdapter 转换为 WifiPeerListAdaptor 时的 NullPointerException 引起的。发生异常是因为在强制转换时listAdapter为null。
要修复崩溃,请在调用clearPeer()函数之前正确初始化listAdapter。
这是一个例子
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()
}
}