java.lang.IllegalArgumentException: наблюдатель нулевой
Пользователь одного из моих приложений сообщил об этой ошибке. Я не понимаю, что это значит и как это исправить. После небольшого поиска... все равно не повезло. Кто-нибудь видел это раньше или знает, как это исправить?
java.lang.IllegalArgumentException: The observer is null.
at android.database.Observable.unregisterObserver(Observable.java:59)
at android.widget.BaseAdapter.unregisterDataSetObserver(BaseAdapter.java:42)
at android.widget.HeaderViewListAdapter.unregisterDataSetObserver(HeaderViewListAdapter.java:256)
at android.widget.AbsListView.onDetachedFromWindow(AbsListView.java:2309)
at android.view.View.dispatchDetachedFromWindow(View.java:8197)
at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:1968)
at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:1966)
at android.view.ViewGroup.removeViewInternal(ViewGroup.java:3257)
at android.view.ViewGroup.removeViewInternal(ViewGroup.java:3237)
at android.view.ViewGroup.removeView(ViewGroup.java:3185)
at com.aheudev.a.slickdeals.adapters.DealPageAdapter.destroyItem(DealPageAdapter.java:174)
at android.support.v4.view.ViewPager.populate(ViewPager.java:415)
at android.support.v4.view.ViewPager.completeScroll(ViewPager.java:696)
at android.support.v4.view.ViewPager.computeScroll(ViewPager.java:668)
at android.view.ViewGroup.drawChild(ViewGroup.java:2434)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2189)
at android.view.View.draw(View.java:9282)
at android.view.ViewGroup.drawChild(ViewGroup.java:2584)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2189)
at android.view.ViewGroup.drawChild(ViewGroup.java:2582)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2189)
at android.view.ViewGroup.drawChild(ViewGroup.java:2582)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2189)
at android.view.View.draw(View.java:9282)
at android.widget.FrameLayout.draw(FrameLayout.java:419)
at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:1923)
at android.view.ViewRoot.draw(ViewRoot.java:1695)
at android.view.ViewRoot.performTraversals(ViewRoot.java:1410)
at android.view.ViewRoot.handleMessage(ViewRoot.java:2040)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:132)
at android.app.ActivityThread.main(ActivityThread.java:4123)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:491)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
at dalvik.system.NativeStart.main(Native Method)
И это пришло из этой функции в моем PagerAdapter:
@Override
public void destroyItem(View collection, int position, Object view) {
((ViewPager) collection).removeView((View) view);
}
3 ответа
У меня тоже была такая же проблема, и кажется, что unregisterDataSetObserver в вашем DealPageAdapter вызывается дважды. Чтобы устранить проблему, я переписал unregisterDataSetObserver в моем адаптере как таковой.
@Override
public void unregisterDataSetObserver(DataSetObserver observer) {
if (observer != null) {
super.unregisterDataSetObserver(observer);
}
}
Надеюсь это поможет!
Есть несколько человек, у которых были ваши проблемы здесь и здесь
При взгляде на стек вызовов выглядит, что ваш "вид" зарегистрировал наблюдателя, который теперь пытается отменить регистрацию. Этого наблюдателя больше нет, хотя его ожидают. Отсюда и ошибка. Это может быть ошибка, или это может быть связано с тем, как вы делаете вещи.
Попытка просмотреть источник Android, чтобы увидеть, можете ли вы отследить его.
Удачи.
Альтернативное решение - обернуть ListView и перехватить исключение. Это решение сработало для меня, и я пока не нашел никаких побочных эффектов.
public class CustumListView extends ListView {
public CustumListView(Context context, AttributeSet attrs) { super(context, attrs); } @Override protected void onDetachedFromWindow() { try { super.onDetachedFromWindow(); } catch(IllegalArgumentException iae) { } } }