2011-09-03 5 views
10

Un utilisateur de l'une de mes applications a signalé cette erreur. Je suis confus quant à ce que cela signifie une façon de le réparer. Après un peu de googling ... toujours pas de chance. Quelqu'un a déjà vu cela ou sait comment le réparer?java.lang.IllegalArgumentException: L'observateur est nul

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) 

Et il est venu de cette fonction dans mon PagerAdapter:

@Override 
public void destroyItem(View collection, int position, Object view) { 
    ((ViewPager) collection).removeView((View) view); 
} 
+0

J'ai trouvé la réponse [ici.] (Http://stackoverflow.com/questions/8508294/what-is-trigger-this-exception-instance-java-lang-illegalargumentexception-th). – aheuermann

Répondre

19

Moi aussi j'avais le même problème et il semble que unregisterDataSetObserver sur votre DealPageAdapter soit appelé deux fois. Pour résoudre le problème que je réenregistrés le unregisterDataSetObserver dans mon adaptateur en tant que telle

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

Hope this helps!

+0

C'est exactement ce dont j'avais besoin! –

+0

Merci cela a fonctionné .... juste merci l'homme. –

+0

a travaillé pour moi, parfait !!!!! – TharakaNirmana

1

Il y a quelques personnes qui ont eu votre problème Here et Here

En regardant la pile d'appel, il ressemble votre "vue" a enregistré un observateur qui essaie maintenant de se désinscrire. Cet observateur n'est plus là même si c'est prévu. D'où l'erreur. Cela peut être un bug ou cela peut être lié à la façon dont vous faites les choses.

Essayez de regarder à travers le Android Source pour voir si vous pouvez le retrouver.

Bonne chance.

0

Une solution alternative consiste à envelopper le ListView et attraper l'exception. Cette solution a fonctionné pour moi, et je n'ai pas encore trouvé d'effets secondaires.

 
    public class CustumListView extends ListView {

 public CustumListView(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    } 

    @Override 
    protected void onDetachedFromWindow() { 
    try { 
     super.onDetachedFromWindow(); 
    } catch(IllegalArgumentException iae) { 

    } 
    } 
} 

Questions connexes