2011-09-03 49 views
10

我的一个应用程序的用户报告了此错误。我很困惑它是什么意思如何解决它。经过一些Google搜索...仍然没有运气。任何人之前看过或知道如何解决它?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); 
} 
+0

我找到了答案[这里](http://stackoverflow.com/questions/8508294/what-is-trigger-this-exception-instance-java-lang-illegalargumentexception-th )。 – aheuermann

回答

19

我也有同样的问题,看起来你的DealPageAdapter上的unregisterDataSetObserver被调用两次。要解决我重写了我的适配器unregisterDataSetObserver这样

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

希望这有助于问题!

+0

这正是我需要的! –

+0

感谢它的工作....只是感谢的人。 –

+0

为我工作,完美!!!!! – TharakaNirmana

1

有几个人谁都有过你的问题HereHere

从看它看起来像调用堆栈你的“观点”注册了一个观察者,它现在正试图取消注册。即使预计这位观察员不在那里。因此错误。这可能是一个错误,或者它可能与你如何做事有关。

试图通过Android Source看看你是否可以追踪它。

祝你好运。

0

另一种解决方案是包装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) { 

    } 
    } 
}