2011-09-03 2 views
10

私のアプリケーションの1人のユーザーがこのエラーを報告しました。私は、それを修正する方法を意味するものとして混乱しています。グーグルのビットの後...まだ運がない。誰でもこれを見たことがありますか、それを修正する方法を知っていますか?java.lang.IllegalArgumentException:オブザーバがnullです

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にこの関数から来た:それはのように見えるコールスタックを見てから、自分の問題HereHere

を持っていた少数の人々があります

@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が2回呼び出されているようです。私は

@Override 
public void unregisterDataSetObserver(DataSetObserver observer) { 
    if (observer != null) { 
     super.unregisterDataSetObserver(observer); 
    } 
} 
としての私のアダプタでunregisterDataSetObserverを上書きし、問題を解決するには、この情報がお役に立てば幸い!

+0

これは私が必要としたものです! –

+0

ありがとうございました....ちょうど感謝の男。 –

+0

私のために働いて、完璧な!!!!! – TharakaNirmana

1

あなたの "ビュー"は登録を取り消そうとしているオブザーバーを登録しました。その観察者はそれがもはや存在しなくても、そこには存在しません。したがって、エラー。これはバグかもしれないし、それはあなたが物事をどうやっているかに関係するかもしれない。

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) { 

    } 
    } 
} 

関連する問題