java.lang.IllegalArgumentException: The observer is null.最终解决方案

本文解决在Android开发中遇到的BaseAdapter导致的java.lang.IllegalArgumentException:The observer is null问题。通过在extends BaseAdapter时添加特定代码,避免了此异常发生。文章详细解释了解决方案并提供了实例代码。
java.lang.IllegalArgumentException: The observer is null.最终解决方案

在使用数据适配的时候的问题:

java.lang.IllegalArgumentException: The observer is null.
	at android.database.Observable.unregisterObserver(Observable.java:64)
	at android.widget.BaseAdapter.unregisterDataSetObserver(BaseAdapter.java:42)
	at android.widget.AbsListView.onDetachedFromWindow(AbsListView.java:2872)
	at android.view.View.dispatchDetachedFromWindow(View.java:11908)
	at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:2647)
	at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:2645)
	at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:2645)
	at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:2645)
	at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:2645)
	at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:2645)
	at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:2645)
	at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:2645)
	at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:2645)
	at android.view.ViewRootImpl.dispatchDetachedFromWindow(ViewRootImpl.java:2685)
	at android.view.ViewRootImpl.doDie(ViewRootImpl.java:4044)
	at android.view.ViewRootImpl.die(ViewRootImpl.java:4027)
	at android.view.WindowManagerImpl.removeViewImmediate(WindowManagerImpl.java:375)
	at android.view.WindowManagerImpl$CompatModeWrapper.removeViewImmediate(WindowManagerImpl.java:170)
	at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:3352)
	at android.app.ActivityThread.access$1200(ActivityThread.java:140)
	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1266)
	at android.os.Handler.dispatchMessage(Handler.java:99)
	at android.os.Looper.loop(Looper.java:137)
	at android.app.ActivityThread.main(ActivityThread.java:4914)
	at java.lang.reflect.Method.invokeNative(Native Method)
	at java.lang.reflect.Method.invoke(Method.java:511)
	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:808)
	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:575)
	at dalvik.system.NativeStart.main(Native Method)
导致的问题所在是BaseAdapter
解决方案:在extends BaseAdapter的时候添加如下代码即可:

	@Override
	public void unregisterDataSetObserver(DataSetObserver observer) {
		if (observer != null) {
	        super.unregisterDataSetObserver(observer);
	    }
	}

希望能帮助你,加油!

这里也是我:我的eoe博客关于这个问题地址

这个异常 `java.lang.IllegalArgumentException: The view is not a child of CoordinatorLayout` 通常发生在你尝试使用 `BottomSheetBehavior.from(view)` 时,但传入的 `view` 并不是 `CoordinatorLayout` 的直接子视图。 ### 常见原因和解决方法: #### ✅ 原因: `BottomSheetBehavior` 只能作用于 `CoordinatorLayout` 的**直接子 View**。如果你尝试通过 `BottomSheetBehavior.from(findViewById(...))` 获取一个不在 `CoordinatorLayout` 中的视图,就会抛出此异常。 #### ✅ 解决方法: 1. **确保使用的是 `BottomSheetDialogFragment` 的正确结构** `BottomSheetDialogFragment` 默认使用的是 `com.google.android.material.R.id.design_bottom_sheet`,必须确保你获取的是这个 ID,并且它在 `CoordinatorLayout` 下。 ```java @Override public void onStart() { super.onStart(); BottomSheetDialog dialog = (BottomSheetDialog) getDialog(); if (dialog != null) { View bottomSheet = dialog.findViewById(com.google.android.material.R.id.design_bottom_sheet); if (bottomSheet != null) { BottomSheetBehavior behavior = BottomSheetBehavior.from(bottomSheet); behavior.setPeekHeight(400); } } } ``` 2. **不要对非 BottomSheet 的 View 使用 `BottomSheetBehavior.from()`** 确保你传入的 View 是 `design_bottom_sheet` 或者你自定义的 `BottomSheet` 布局,并且是 `CoordinatorLayout` 的子 View。 3. **如果你自定义了布局**,请确保结构如下: ```xml <androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <View android:id="@+id/bottom_sheet" android:layout_width="match_parent" android:layout_height="300dp" android:background="@android:color/white" android:layout_gravity="bottom" android:elevation="8dp" android:fitsSystemWindows="true" app:layout_behavior="com.google.android.material.bottomsheet.BottomSheetBehavior" /> </androidx.coordinatorlayout.widget.CoordinatorLayout> ``` 4. **在 DialogFragment 中使用时注意时机** 一定要在 `onStart()` 或 `onActivityCreated()` 生命周期中获取 `BottomSheetBehavior`,不能在 `onCreateView()` 中获取,因为此时 Dialog 的内容还未绑定。 ---
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值